题解:年份闰年判断、月份1~12月判断、天数正确判断、去重。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
struct note
{
int aa,bb,cc;
} q[110];
int book[3000][13][35];
bool cmp(note x,note y)
{
if(x.aa==y.aa)
{
if(x.bb==y.bb)
return x.cc<y.cc;
else
return x.bb<y.bb;
}
else
return x.aa<y.aa;
}
int run(int y)
{
if(y%4==0&&y%100!=0||y%400==0)
return 1;
return 0;
}
int days(int month,int year)
{
if (month==2)
{
if (run(year))
return 29;
else
return 28;
}
else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return 31;
else
return 30;
}
int main()
{
int i,j;
int a,b,c;
scanf("%d/%d/%d",&a,&b,&c);
int l=0;
if (a>=60)
q[l].aa=1900+a;
else
q[l].aa=2000+a;
if (b<=12&&b>=1)
{
if (c<=days(b,a)&&c>=1)
{
q[l].bb=b;
q[l].cc=c;
l++;
}
}
if (c>=60)
q[l].aa=1900+c;
else
q[l].aa=2000+c;
if (a<=12&&a>=1)
{
if (b<=days(a,c)&&b>=1)
{
q[l].bb=a;
q[l].cc=b;
l++;
}
}
if (c>=60)
q[l].aa=1900+c;
else
q[l].aa=2000+c;
if (b<=12&&b>=1)
{
if (a<=days(b,c)&&a>=1)
{
q[l].bb=b;
q[l].cc=a;
l++;
}
}
sort(q,q+l,cmp);
for(i=0; i<l; i++)
if(!book[q[i].aa][q[i].bb][q[i].cc])
{
printf("%d-%02d-%02d\n",q[i].aa,q[i].bb,q[i].cc);
book[q[i].aa][q[i].bb][q[i].cc]=1;
}
return 0;
}