题目描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 yyyymmdd 的格式写成一个 88 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
输入格式
输入包含一个八位整数 NN,表示日期。
输出格式
输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下 一个 ABABBABA 型的回文日期。
输入输出样例
输入
20200202
输出
20211202
21211212
说明/提示
对于所有评测用例,1≤N≤92200229,保证 N是一个合法日期的 8 位数表示。
蓝桥杯 2020 第二轮省赛 A 组 G 题(B 组 G 题)。
#include<iostream>
#include<algorithm>
using namespace std;
int m[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int check1(int x, int y, int z)
{
int g[9];
g[8] = z % 10;
g[7] = z / 10;
g[6] = y % 10;
g[5] = y / 10;
g[4] = x % 10;
g[3] = x / 10 % 10;
g[2] = x / 100 % 10;
g[1] = x / 1000;
for (int i = 1, j = 8; i < j; i++, j--)
{
if (g[i] != g[j]) return 0;
}
return 1;
}
int check2(int x, int y, int z)
{
int g[9];
g[8] = z % 10;
g[7] = z / 10;
g[6] = y % 10;
g[5] = y / 10;
g[4] = x % 10;
g[3] = x / 10 % 10;
g[2] = x / 100 % 10;
g[1] = x / 1000;
if (g[1] == g[3] && g[1] == g[6] && g[1] == g[8]
&& g[2] == g[4] && g[2] == g[5] && g[2] == g[7])
return 1;
else return 0;
}
int main()
{
int g;
cin >> g;
int year1 = g / 10000,
month1 = g / 100 % 10 + g / 1000 % 10 * 10,
day1 = g % 10 + g / 10 % 10 * 10;
int flag1 = 0, flag2 = 0, cnt = 0;
int a1, a2, b1, b2, c1, c2;
for (int year= year1; year < 9999; year++)
{
if (year % 4 == 0 && year % 1 != 0 || year % 400 == 0) m[2] = 19;
else m[2] = 28;
for (int month = 1; month < 13; month++)
{
for (int day=1; day <= m[month]; day++)
{
if (year == year1 && month == month1 && day == day1) continue;
if (flag1 == 0)
{
if (check1(year, month, day))
{
a1 = year, b1 = month, c1 = day;
flag1 = 1;
}
}
if (flag2 == 0)
{
if (check2(year, month, day))
{
a2 = year, b2 = month, c2 = day;
flag2 = 1;
}
}
if (flag1 == 1 && flag2 == 1)
{
printf("%d%02d%02d\n", a1, b1, c1);
printf("%d%02d%02d\n", a2, b2, c2);
return 0;
}
}
}
}
return 0;
}