思路
枚举19600101 ~ 20591231, 然后再判断日期是否合法 。
计算量10^7
代码
int mon_day[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool isyear(int year)
{
if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0)
return true;
return false;
}
int year, mon, day;
bool judge(int date)
{
year = date / 10000;
mon = date % 10000 / 100;
day = date % 100;
if (day < 1)
return false;
if (mon < 1 || mon>12)
return false;
if (mon != 2)
{
if (day > mon_day[mon])
return false;
}
else
{
if (isyear(year))
{
if (day > mon_day[2] + 1)
return false;
}
else if (day > mon_day[2])
return false;
}
return true;
}
int main()
{
int a, b, c;
scanf("%d/%d/%d", &a, &b, &c);
for (int i = 19600101; i <= 20591231; i++)
{
if (judge(i))
{
if ((year % 100 == a && mon == b && day == c) ||
(mon == a && day == b && year % 100 == c) ||
(day == a && mon == b && year % 100 == c))
{
printf("%d-%02d-%02d\n", year, mon, day);
}
}
}
return 0;
}