半小时写的代码,没注意优化
但在vs里运行是没任何问题的
在蓝桥杯模拟上就没法输出,是啥情况?
闰年感觉不需要考虑,最高是到8999年,而闰年的2月29对应9220年。
题目:给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
long date;
scanf_s("%d", &date);
int y = date / 10000;
int m = date % 10000 / 100;
int d = date % 100;
int year = y, month = m, day = d + 1;
int j, k;
int first = 1, second = 1;
for (int i = year; i < 9000 && (second == 1 || first == 1); i++) {
for (j = month; j < 13 && (second == 1 || first == 1); j++) {
int maxday = 0;
switch (j)
{
case 1:
maxday = 31;
break;
case 2:
maxday = 28;
break;
case 3:
maxday = 31;
break;
case 4:
maxday = 30;
break;
case 5:
maxday = 31;
break;
case 6:
maxday = 30;
break;
case 7:
maxday = 31;
break;
case 8:
maxday = 31;
break;
case 9:
maxday = 30;
break;
case 10:
maxday = 31;
break;
case 11:
maxday = 30;
break;
case 12:
maxday = 31;
break;
default:
break;
}
for (k = day; k <= maxday && (second == 1 || first == 1); k++)
{
if (first == 1 && i == j % 10 * 10 + j / 10 + k % 10 * 1000 + k / 10 * 100) {
printf("%d%d%d%d%d\n", i, j / 10, j % 10, k / 10, k % 10);
first = 0;
}
if (first == 0 && second == 1 && i == j % 10 * 10 + j / 10 + k % 10 * 1000 + k / 10 * 100 && (j / 10 + j % 10 * 10) == (k / 10 + k % 10 * 10)) {
printf("%d%d%d%d%d", i, j / 10, j % 10, k / 10, k % 10);
second = 0;
}
}
if (k == maxday + 1) day = 1;
}
if (j == 13) month = 1;
}
return 0;
}