#include<bits/stdc++.h>
using namespace std;
int year1,month1,day1,year2,month2,day2,year,month,day,num=0;
string a1,a2;
int nian(int yearr)
{
int i;
if((yearr%4==0&&yearr%100!=0)||yearr%400==0) i=1;
else i=0;
return i;
}
int tiann(int yearr,int monthh)
{
int i;
if(monthh==2) i=28+nian(yearr);
else if(monthh==4||monthh==6||monthh==9||monthh==11) i=30;
else i=31;
return i;
}
int main()
{
string bm,bd,bb;
cin>>a1>>a2;
year=stoi(a1.substr(0,4));
month=stoi(a1.substr(4,2));
day=stoi(a1.substr(6,2));
year2=stoi(a2.substr(0,4));
month2=stoi(a2.substr(4,2));
day2=stoi(a2.substr(6,2));
for(;;day++)
{
if(year==year2&&month==month2&&day==day2+1) break;
if(day>tiann(year,month)){day=1;month+=1;}
if(month>12){month=1;year+=1;}
if(day<10) bd="0"+to_string(day);
else bd=to_string(day);
if(month<10) bm="0"+to_string(month);
else bm=to_string(month);
bb=to_string(year)+bm+bd;
if(bb[7]==bb[0]&&bb[6]==bb[1]&&bb[5]==bb[2]&&bb[4]==bb[3]) {num++;}
}
if(a1==a2&&num!=0) num==1;
cout<<num;
return 0;
}
第一段代码,通过字符串-数-字符串的转化与暴力枚举获得答案,但是每一次循环都要进行6次if判定,于是有一个测试点超时
于是我删去了数转字符串的环节,直接对数进行判定和暴力枚举:
#include<bits/stdc++.h>
using namespace std;
int year2,month2,day2,year,month,day,num=0;
string a1,a2;
int nian(int yearr)
{
int i;
if((yearr%4==0&&yearr%100!=0)||yearr%400==0) i=1;
else i=0;
return i;
}
int tiann(int yearr,int monthh)
{
int i;
if(monthh==2) i=28+nian(yearr);
else if(monthh==4||monthh==6||monthh==9||monthh==11) i=30;
else i=31;
return i;
}
int main()
{
cin>>a1>>a2;
year=stoi(a1.substr(0,4));
month=stoi(a1.substr(4,2));
day=stoi(a1.substr(6,2));
year2=stoi(a2.substr(0,4));
month2=stoi(a2.substr(4,2));
day2=stoi(a2.substr(6,2));
for(;;day++)
{
if(year==year2&&month==month2&&day==day2+1) break;
if(day>tiann(year,month)){day=1;month+=1;}
if(month>12){month=1;year+=1;}
if(year==month%10*10+month/10*10+day/10*100+day%10*1000) num++;
}
if(a1==a2&&num!=0) num==1;
cout<<num;
return 0;
}
时间是过了,但是,有三个测试点WA!
最迷的是我下了#1数据然后自己测,输出没有错。
求助大佬指出错误!