法1:正向思维,列举可能的三个日期再判断
挺麻烦的
#include<iostream>
#include<algorithm>
using namespace std;
int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int date[3];
void check(int x){
int y=x/10000,m=x/100%100,d=x%100;
if(y%4==0&&y%100!=0||y%400==0) day[2]=29;
else day[2]=28;
if(m>=1&&m<=12&&d>=1&&d<=day[m]) printf("%d-%02d-%02d\n",y,m,d);
}
int main(){
int aa,bb,cc;
scanf("%d/%d/%d",&aa,&bb,&cc);
int y1=(aa>60?1900:2000)+aa,m1=bb,d1=cc;
int y2=(cc>60?1900:2000)+cc,m2=bb,d2=aa;
int y3=(cc>60?1900:2000)+cc,m3=aa,d3=bb;
date[0]=y1*10000+m1*100+d1;
date[1]=y2*10000+m2*100+d2;
date[2]=y3*10000+m3*100+d3;
sort(date,date+3);
check(date[0]);
if(date[1]!=date[0]) check(date[1]);
if(date[2]!=date[1]) check(date[2]);
return 0;
}
法2:列举日期再判断是否符合
hh好像也挺麻烦。。。
#include<iostream>
using namespace std;
int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int aa,bb,cc;
scanf("%d/%d/%d",&aa,&bb,&cc);
for(int y=1960;y<=2059;y++){
if(y%4==0&&y%100!=0||y%400==0) day[2]=29;
else day[2]=28;
for(int m=1;m<=12;m++){
for(int d=1;d<=day[m];d++){
if(y%100==aa&&m==bb&&d==cc||y%100==cc&&m==bb&&d==aa||y%100==cc&&m==aa&&d==bb)
printf("%d-%02d-%02d\n",y,m,d);
}
}
}
return 0;
}
虽然但是,,两种方法为什么都是50ms。。感觉第一种应该快一点才对。