AcWing 2867. 回文日期
原题链接
简单
作者:
saye
,
2022-02-22 15:37:11
,
所有人可见
,
阅读 239
C++ 代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//判断时间是否为正常日期
bool isdate(int date){
int year=date/10000,month=date%10000/100,day=date%100;
if(year%400==0||(year%4==0&&year%100!=0)) m[2]=29;//闰年的特殊情况
//日<0,月>12,日>他所在年所在月的天数
if(day<0||month>12||day>m[month]) return false;
else return true;
}
bool check1(string s){//判断回文
//双指针
int len=s.length();
for(int i=0,j=len-1;i<j;i++,j--){
if(s[i]!=s[j]) return false;
}
return true;
}
bool check2(string s){ //判断ABABBABA
//if(s[0]==s[2]==s[5]==s[7]&&s[1]==s[3]==s[4]==s[6]&&) return true;
//这是错误的c++不能进行连续三个以上的相等判断
if(s[0]==s[2]&&s[2]==s[5]&&s[5]==s[7]&&s[1]==s[3]&&s[3]==s[4]&&s[4]==s[6]&&s[0]!=s[1]) return true;
else return false;
}
int main(){
int x;
cin>>x;
for(int i=x+1;;i++){
if(isdate(i)){
string s=to_string(i);
if(check1(s)) {
cout<<i<<endl;//回文日期
break;
}
}
}
for(int i=x+1;;i++){
if(isdate(i)){
string s=to_string(i);
if(check2(s)) {
cout<<i<<endl;//ABABBABA
break;
}
}
}
return 0;
}