AcWing 2867. 回文日期
原题链接
简单
作者:
WyKer
,
2024-10-09 17:44:12
,
所有人可见
,
阅读 2
#include<bits/stdc++.h>
using namespace std;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check_date(int date)//判断日期是否合法
{
int year=date/10000;
int month=date%10000/100;
int day=date%100;
if(day==0||month<=0||month>12)
return false;
if(month!=2&&day>months[month])//判断一下非2月的不合法情况
return false;
if(month==2)//2月要带上闰年判断
{
if((year%4==0)&&(year%100!=0)||(year%400==0))
if(day>29)
return false;
else{
if(day>28)
return false;
}
}
return true;
}
bool check_h(int date)//判断是否是回文数组
{
int a[8];
int b=date;
for(int i=7;i>=0;i--)
{
a[i]=b%10;
b=b/10;
}
int i=0,j=7;
for(;i<j;i++,j--)
{
if(a[i]!=a[j])
return false;
}
return true;
}
bool check_AB(int date)//判断是否是ABABBABA
{
int a[8];
int b=date;
for(int i=7;i>=0;i--)
{
a[i]=b%10;
b=b/10;
}
if(!check_h(date))
return false;
else{
if(a[0]!=a[2]||a[1]!=a[3]||a[0]==a[1])
return false;
}
return true;
}
int main()
{
int date;
cin>>date;
int flag=0;
for(int i=date+1;;i++)
{
if(check_date(i))
{
if(check_h(i)&&!flag)
{
cout<<i<<endl;
flag=1;
}
if(check_AB(i))
{
cout<<i<<endl;
return 0;
}
}
}
return 0;
}