2020蓝桥杯回文日期
本题值得思考的点在于对日期合理性的判定,这是具有普遍性的
判断日期代码如下
int isriqi(int shu)
{
int a[8];
a[7]=shu%10;
for(int i=6;i>=0;i--)
{
a[i]=shu/10%10;
shu=shu/10;
}
int nian=a[0]*1000+a[1]*100+a[2]*10+a[3];
int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(!(nian%100))
{
if(!(nian%400)) b[1]=29;
}
else {
if((nian%4)) b[1]=29;
}
int yue=a[4]*10+a[5];
int ri=a[6]*10+a[7];
if(yue>12 || yue= =0) return 0;
if(ri>b[yue-1] ||ri= =0) return 0;
int result=nian*10000+yue*100+ri;
return result;
}
完整代码如下
#include <iostream.h>
using namespace std;
int ishuiwen(int shu)
{
int a[8];
a[7]=shu%10;
for(int i=6;i>=0;i--)
{
a[i]=shu/10%10;
shu=shu/10;
}
int i=0,j=7;
while(i<j)
{
if(a[i]!=a[j]) return 0;
i++,j--;
}
return 1;
}
int isab(int shu)
{
int a[8];
a[7]=shu%10;
for(int i=6;i>=0;i--)
{
a[i]=shu/10%10;
shu=shu/10;
}
if(a[0]= =a[2] && a[2]= =a[5] && a[5]= =a[7] && a[1]= =a[3] &&a[3]= =a[4] &&a[4]= =a[6]) return 1;
else return 0;
}
int isriqi(int shu)
{
int a[8];
a[7]=shu%10;
for(int i=6;i>=0;i--)
{
a[i]=shu/10%10;
shu=shu/10;
}
int nian=a[0]*1000+a[1]*100+a[2]*10+a[3];
int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(!(nian%100))
{
if(!(nian%400)) b[1]=29;
}
else {
if((nian%4)) b[1]=29;
}
int yue=a[4]*10+a[5];
int ri=a[6]*10+a[7];
if(yue>12 || yue= =0) return 0;
if(ri>b[yue-1] ||ri= =0) return 0;
int result=nian*10000+yue*100+ri;
return result;
}
int main()
{
int shu=0;
cin>>shu;
for(int i=shu+1;i<99999999;i++)
{
if(isriqi(i) && ishuiwen(i))
{
int result=isriqi(i);
cout<<result<<endl;
break;
}
}
for(int i=shu+1;i<99999999;i++){
if(isriqi(i) && isab(i))
{
int timi=isriqi(i);
cout<<timi;
break;
}
}
return 0;
}