AcWing 2867. 回文日期
原题链接
简单
作者:
ITNXD
,
2021-04-17 20:24:17
,
所有人可见
,
阅读 353
蓝桥杯的恶心题目
参考代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
// 直接用string判断回文
bool check_huiwen(int x){
string a = to_string(x);
string b = a;
reverse(b.begin(), b.end());
return a == b;
}
// ababbaba类型判断
bool check_abab(int x){
// 前四个数
int a = x / 10000000 , b = x / 1000000 % 10;
int c = x /100000 % 10 , d = x / 10000 % 10;
if(a == c && b == d && a != b) return true;
return false;
}
// 日期合法判断
bool check_date(int x){
int y = x / 10000, m = x / 100 % 100, d = x % 100;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0) month[2] = 29;
else month[2] = 28;
if(m >= 1 && m <= 12 && d >= 1 && d <= month[m]) return true;
return false;
}
int main(){
int x; cin >> x;
// flag1:回文
// flag2:既是回文又是abab
bool flag1 = false, flag2 = false;
int huiwen, huiwenAbab;
for(int i = x + 1; ; i ++){
if(check_date(i)){
if(!flag1 && check_huiwen(i)) huiwen = i, flag1 = true;
if(!flag2 && check_huiwen(i) && check_abab(i)) huiwenAbab = i, flag2 = true;
}
if(flag1 && flag2) break;
}
cout << huiwen << endl << huiwenAbab << endl;
return 0;
}