代码1
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=13;
const int M=10;
int cnt;
struct res{
int y,m,d;
int sum;
}t[M];
bool cmp(res a,res b){
return a.sum<b.sum;
}
int a[N]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void check(int x,int y,int z){
if(x<=59&&x>=0){
//20年
if(y>=1&&y<=12&&z>0&&z<=a[y]+(x%4==0&&x%100!=0)||(x%400==0)){
t[cnt].y=2000+x;
t[cnt].m=y;
t[cnt].d=z;
t[cnt].sum=(2000+x)*10000+y*100+z;
cnt++;
}
}
else{
//19年
if(y>1&&y<=12&&z>0&&z<=a[y]+(x%4==0&&x%100!=0)||(x%400==0)){
t[cnt].y=1900+x;
t[cnt].m=y;
t[cnt].d=z;
t[cnt].sum=(1900+x)*10000+y*100+z;
cnt++;
}
}
}
int main(){
int x,y,z;
scanf("%d/%d/%d",&x,&y,&z);
check(x,y,z);
check(z,x,y);
check(z,y,x);
sort(t,t+cnt,cmp);
for(int i=0;i<cnt;i++){
if(i&&t[i].sum==t[i-1].sum)//去重
continue;
printf("%d-%02d-%02d\n",t[i].y,t[i].m,t[i].d);
}
return 0;
}
代码2:
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=13;
int a[N]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void check(int x,int y,int z){
int flag;
if(x<=59&&x>=0){
//20年
if((x%4==0&&x%100!=0)||x%400==0)
flag=1;//闰年
else
flag=0;//平年
if(y>=1&&y<=12){
if(y!=2&&z>=1&&z<=a[y]){
printf("20%02d-%02d-%02d\n",x,y,z);
}
if(y==2&&flag==1&&z>=1&&z<=29)
printf("20%02d-%02d-%02d\n",x,y,z);
if(y==2&&flag==0&&z>=1&&z<=28)
printf("20%02d-%02d-%02d\n",x,y,z);
}
}
else{
//19年
if((x%4==0&&x%100!=0)||x%400==0)
flag=1;//闰年
else
flag=0;//平年
if(y>=1&&y<=12){
if(y!=2&&z>=1&&z<=a[y]){
printf("19%02d-%02d-%02d\n",x,y,z);
}
if(y==2&&flag==1&&z>=1&&z<=29)
printf("19%02d-%02d-%02d\n",x,y,z);
if(y==2&&flag==0&&z>=1&&z<=28)
printf("19%02d-%02d-%02d\n",x,y,z);
}
}
}
int main(){
string s;
cin>>s;
int x,y,z;
string p,q,r;
p=s[0];
p+=s[1];
q=s[3];
q+=s[4];
r=s[6];
r+=s[7];
x=atoi(p.c_str());
y=atoi(q.c_str());
z=atoi(r.c_str());
if((x<=59&&x<=z)||(x>=60)){
check(x,y,z);
if(x<y){
check(z,x,y);
if(x!=z)
check(z,y,x);}
else if(x>y){
check(z,y,x);
if(x!=z)
check(z,x,y);
}
else{
if(x!=z)
check(z,x,y);
}
}
else{
if(x<y){
check(z,x,y);
if(x!=z)
check(z,y,x);
}
else if(x>y){
check(z,y,x);
if(x!=z)
check(z,x,y);
}
else{
if(x!=z)
check(z,x,y);
}
check(x,y,z);
}
return 0;
}
可以看到代码1比代码2简洁很多,这里很重要的一点是scnaf,printf的格式化输入输出!!!
代码1中应用到了结构体和排序,去重,避免了重复,遗漏的情况