题目描述
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; }