解题思路:
先构造回文日期与ABABBABA形日期,再判断日期是否合法
如何构造回文日期:
假设输入的日期为 n
取 n 的前四位为 x,即 x = n / 10000
将 x 反转后接在 x 的后面就构造了一个回文日期,即 x * 10000 + reverse(x)
然后判断这个回文日期是否合法,若不合法就令 x++ 继续构造回文日期
例如 n = 20200202,则前四位 x = 2020,反转 x 为 202
构造回文日期为 2020 * 10000 + 202 = 20200202
日期合法但不大于 n,使 x += 1 循环以上步骤
如何构造ABABBABA形日期:
与构造回文日期类似,只要取前两位就能构造,就不多说了
参考代码:
#include <bits/stdc++.h> using namespace std; //出现02月29时,年份只能是9220,一定合法,不必判断闰年 int days[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int n; int reverse_num(int x) { //反转整数 int ret = 0; while (x) { ret = ret * 10 + x % 10; x /= 10; } return ret; } bool check(int x) { //检查日期是否合法 if (x <= n) return false; int dd = x % 100; x /= 100; int mm = x % 100; return mm > 0 && mm < 13 && dd <= days[mm]; } int main() { cin >> n; for (int i = n / 10000; i <= 9999; i++) { //取前四位构造回文日期 int x = i * 10000 + reverse_num(i); if (check(x)) { cout << x << endl; break; } } for (int i = n / 1000000; i <= 99; i++) { //取前两位构造 ABABBABA 形日期 int x = i * 1000000 + i * 10000 + reverse_num(i) * 100 + reverse_num(i); if (check(x)) { cout << x << endl; break; } } return 0; }
0.0分
59 人评分
钟神赛车 (C语言代码)浏览:911 |
C语言训练-素数问题 (C语言代码)浏览:1695 |
字符串对比 (C语言代码)浏览:1471 |
WU-蓝桥杯算法提高VIP-勾股数 (C++代码)浏览:1685 |
【绝对值排序】 (C语言代码)浏览:892 |
简单的a+b (C语言代码)浏览:529 |
C二级辅导-阶乘数列 (C语言代码)浏览:583 |
DNA (C语言代码)浏览:837 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:765 |
C语言程序设计教程(第三版)课后习题7.3 (C++代码)浏览:483 |