蓝桥杯 第十一届 回文日期
#include<bits/stdc++.h>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
const int N =1e5+20;
string n,s;
int y,m,d;
struct cmp {
bool operator()(const int&a,const int&b) const {
return a>b;
}
};
int month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
//bool Valid(int m,int d) {
// if(d>=1&&d<=month[m]) return true;
// else return false;
//}
bool Palindrome(string s) { //第一个回文日期
int flag =0;
for(int i =0; i<=7; i++) {
if(s[i]!=s[7-i]) {
flag=1;
break;
}
}
if(flag ==0) return true;
return false;
}
//bool Palindrome2(string s) {
// if(s[0]==s[2]&&s[1]==s[3])
// return true;
// return false;
//}
int main() {
cin >> n;
//n="20200202";
y=stoi(n.substr(0,4));
m =stoi(n.substr(4,2));
d =stoi(n.substr(6,2));
bool flag1 =false,flag2= false;
for(int i =y; !flag2; i++) {
if(i%4==0&&i%100!=0||i%400==0)
month[2]=29;
else month[2]=28;
//string s = to_string(i);
//y=stoi(s.substr(0,4));
for(int j = m; j<=12; j++) {
for(int k =d+1; k<=month[j]; k++) {
int flag = 0;
//if(Valid(j,k)) {
//string s2,s3;
//string s;
s= to_string(i);
if(j>=10)
s =s+ to_string(j);
else s=s+'0'+to_string(j);
if(k>=10)
s += to_string(k);
else s=s+'0'+to_string(k);
//s = s1+s2+s3;
//cout<<s<<endl;
//if(s=="21211212") return 0;
flag =Palindrome(s);
if(flag&&!flag1) {
cout <<s<<endl;
flag1=true;
}
if(flag&&!flag2&&s[0]==s[2]&&s[1]==s[3]) {
//cout<<1;
cout<<s<<endl;
flag2=true;
//cout<<1;
}
//}
//if(flag1&&flag2) break;
}
d=0;
//if(flag1&&flag2) break;
}
m=1;
//if(flag1&&flag2) break;
//cout<<s<<endl;
//if(i == 2122) break;
}
return 0;
}
//20211202
//21211212
这样是不行的 不能使用stoi函数 和 substr函数。 https://cxybb.com/article/qq_45784038/115663154 正确答案是链接