[蓝桥杯][2017年第八届真题]日期问题
水题~。
const int N=1e5+10;
struct Node
{
int yy,mm,dd;
bool operator<(const Node &W) const
{
if(yy != W.yy) return yy < W.yy;
if(mm != W.mm) return mm < W.mm;
return dd < W.dd;
}
};
int month[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int a,b,c;
set<Node> res;
bool isLeap(int year)
{
return (year % 4 == 0 && year % 100) || year % 400 == 0;
}
void check(int yy,int mm,int dd)
{
if(yy < 60) yy=2000+yy;
else yy=1900+yy;
if(mm == 0 || mm > 12) return;
bool isleap=isLeap(yy);
if(dd == 0 || dd > month[isleap][mm]) return;
res.insert({yy,mm,dd});
}
int main()
{
scanf("%d/%d/%d",&a,&b,&c);
check(a,b,c);//年月日
check(c,a,b);//月日年
check(c,b,a);//日月年
for(auto t:res)
printf("%d-%02d-%02d\n",t.yy,t.mm,t.dd);
//system("pause");
return 0;
}