赞
踩
时间限制:1.0s 内存限制:256.0MB
2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按 yyyymmdd 的格式写成一个8位数是 ,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期: 即2021年12月2日。
也有人表示 并不仅仅是一个回文日期,还是一个 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 型的回文日期: 即2121年12月12日。算不上“千年一遇”,顶多算“千年两遇”。
给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
输入包含一个八位整数 ,表示日期。
输出两行,每行1个八位数。
第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。
20200202
20211202
21211212
对于所有评测用例,10000101<=N<=89991231,保证N是一个合法日期的 8 位数表示。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int jilu[11000];
int k[20];
int d,l;
int day[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int run(int year)
{
if((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
void li(int n)
{
l=0;
while(n)
{
k[l++]=n%10;
n=n/10;
}
}
void init()
{
int month,dayy;
int sum;
int year,i;
for(i=1000; i<=9999; i++)
{
year=i;
month=year%10*10+year/10%10;
dayy=year/1000+year/100%10*10;
if(month>=1&&month<=12)
{
if(month==2)
{
if(dayy>=1&&dayy<=28+run(i))
jilu[d++]=year*10000+month*100+dayy;
}
else
{
if(dayy>=1&&dayy<=day[month])
jilu[d++]=year*10000+month*100+dayy;
}
}
}
}
int main()
{
int x;
scanf("%d",&x);
init();
int i;
int f1=0,f2=0,f3;
for(i=0; i<d; i++)
{
if(jilu[i]>x&&f1==0)
{
printf("%d\n",jilu[i]);
f1=1;
}
if(jilu[i]>x)
{
li(jilu[i]);
int u;
for(u=0; u<l; u++)
{
if(k[0]==k[2]&&k[0]==k[5]&&k[0]==k[7])
{
if(k[0]!=k[1])
{
if(k[1]==k[3]&&k[1]==k[4]&&k[1]==k[6])
{
printf("%d\n",jilu[i]);
f2=1;
break;
}
}
}
}
}
if(f1&&f2)
break;
}
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。