为什么运行结果没错,但是提交就是WA

P2010 [NOIP2016 普及组] 回文日期

adtom @ 2021-01-19 12:34:29

#include<iostream>
using namespace std;
int main(){
    int date1,date2;
    int i,j,k,num;
    int x,y,p,q,c,d;
    cin>>date1>>date2; //输入两个日期 
    int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; //月份天数,2.29日对应9220是闰年 
    int b[8];
    x=date1/10000;
    y=date2/10000;
    for(i=x;i<=y;i++){
        for(j=1;j<=12;j++){
            for(k=1;k<a[j];k++){
                date1=i*10000+j*100+k;
                p=date1-i*10000;
                c=p/1000+p/100%10*10+p/10%10*100+p%10*1000;
                if(c==i){
                    num++;
                }
            }
        }
    }
    cout<<num;
    return 0;
} 

by LHQing @ 2021-01-19 12:39:24

@adtom

hack_input:
20111103
20111103

by w23c3c3 @ 2021-01-19 12:39:25

@adtom 你这样求的不一定是在范围之间的(只有年份在范围里面,月日不一定在)


by LHQing @ 2021-01-19 12:39:48

@adtom 需要判断日期是否在date1与date2之间


by adtom @ 2021-01-19 21:53:40

#include<iostream>
using namespace std;
int main(){
    int date1,date2;
    int i,j,k,num;
    int x,y,p,q,c,d;
    cin>>date1>>date2; //输入两个日期 
    int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; //月份天数,2.29日对应9220是闰年 
    int b[8];
    int date=date1;
    x=date1/10000;
    y=date2/10000;
    for(i=x;i<=y;i++){
        for(j=1;j<=12;j++){
            for(k=1;k<a[j];k++){
                date1=i*10000+j*100+k;
                if(date1<=date2&&date1>=date){
                p=date1-i*10000;
                c=p/1000+p/100%10*10+p/10%10*100+p%10*1000;
                if(c==i){
                    num++;
                }
                }
            }
        }
    }
    cout<<num;
    return 0;
}

我加了个判断后还是不行


by adtom @ 2021-01-19 21:54:02

@LHQing


by adtom @ 2021-01-20 22:02:08

逻辑好像没错就是num没初始化原因,给num初始化,然后只通过了一部分


|