回文日期
题目描述
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
输入描述
输入n,,保证 N 是一个合法日期的 8 位数表示。
输出描述
输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。
输入输出样例
示例
输入 :20200202
输出
20211202
21211212
运行限制
最大运行时间:1s
最大运行内存: 256M
思路:暴力
1e8暴力即可,注意判断日期的合法性
代码
#include <iostream> #include <map> #include <bits/stdc++.h> using namespace std; int rw(int x){ int ans = 0; for (int i = 0; i < 4; i++){ ans *= 10; ans += x % 10; x /= 10; } return ans; } map<int, int> mp = {{0, 1}, {3, 1}, {5, 1}}; bool judge(int x) { int flag = 1; int a = x % 10; x /= 10; int b = x % 10; for (int i = 0; i < 6; i++) { x /= 10; int t = x % 10; if (mp[i] && t != a) { flag = 0; break; } if (!mp[i] && t != b) { flag = 0; break; } } if (flag) return true; else return false; } int solve(int x) { int d = 0, m = 0, y = 0; y=x/10000; m = (x % 10000) / 100; d=x%100; if(m > 12 || m < 1) return false; if ((y % 100 && y % 4==0) || y % 400 == 0) { if (m == 2 && d > 29) return false; } else { if (m == 2 && d > 28) return false; } int dayInMonth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; // cout<<m<<endl; if(d > dayInMonth[m] || d <= 0) return false; return true; } int main() { int num; cin >> num; int a = num + 1; int b; for (; a < 100000000; a++) { if (a / 10000 == rw(a) && solve(a)) { cout << a << endl; break; } } a = num + 1; for (; a < 100000000; a++) { if (judge(a) && solve(a)) { cout << a << endl; break; } } return 0; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/17216573.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步