回文日期-蓝桥杯
按步骤来就行,好好分析!
#include<bits/stdc++.h>
using namespace std;
int a[10];
int month[13] = { 0, 31,28,31,30,31,30,31,31,30,31,30,31 };
bool check(int yy, int mm, int dd) {//是否满足日期格式
if (mm >= 1 && mm <= 12) {
if (yy % 400 == 0 || (yy % 4 == 0 && yy % 100 != 0))
month[2] = 29;
if (month[mm] >= dd) return true;
else return false;
}
return false;
}
void change(int n) { //把日期存入到数组中
int ans = 7;
while(n) {
a[ans--] = n%10;
n /= 10;
}
}
bool dec1(int a[]) { //第一种,先判断是否回文日期
for(int i = 0; i < 4; i++) {
if(a[i] != a[8-1-i]) {
return false;
}
}
return true;
}
bool dec2(int a[]) { //在第一种的情况下,判断是否ababbaba
if(a[0] != a[2] || a[1] != a[3]) {
return false;
}
return true;
}
int main() {
int n, id = 1; //id用于if条件判断,也是跳出循环的条件
cin >> n;
for(int i = n+1; ; i++) {
memset(a, 0, sizeof(a));
change(i);
if(dec1(a)) { //1、首先判断是否回文
int yy, mm, dd;
yy = i/10000, mm = i%10000/100, dd = i %100;
if(check(yy, mm, dd)) { // 2、是否符合日期格式
if(id == 1){ //3、情况一满足回文日期
for(int j = 0; j < 8; j++) {
cout << a[j];
}
id++;
cout << endl;
if(dec2(a)) {//可能判断出的第一个数就是ababbaba,直接输出结束,这一步很重要
for(int j = 0; j < 8; j++) {
cout << a[j];
}
id++;;
cout << endl;
}
} else if(id == 2 && dec2(a)){ //4、情况二符合ababbaba
for(int j = 0; j < 8; j++) {
cout << a[j];
}
id++;;
cout << endl;
}
}
}
if(id > 2) {
break;
}
}
return 0;
}