题目描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
输入描述
输入包含一个八位整数 N,表示日期。
对于所有评测用例,10000101≤N≤89991231,保证 N 是一个合法日期的 8 位数表示。
输出描述
输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。
示例
输入:
20200202
输出:
20211202
21211212
但在这里我自己写的代码放在官网只有50%的正确率,几个能想到的测试用例输入进去也都输出正确的值,有没有看看哪里出了问题?
#include
#include
#define N 9999
using namespace std;
int search(int x3,int x4);
void Hui1(long a,int *x,int *y);
int search1(int x1,int x2);
void Hui(long a,int *x,int *y);
int main()
{
int *yy11=NULL,*mm11=NULL;
long a;
cin>>a;
Hui(a,yy11,mm11);
Hui1(a,yy11,mm11);
}
void Hui(long a,int *x,int *y)
{
int x1,x2,x3,x4,dd,yy,yy1,mm1,x5,x6;
x1=a/10000000;
x2=(a/1000000)%10;
x3=(a/100000)%10;
x4=(a/10000)%10;
x5=a%10000;
x6=1000*x4+100*x3+10*x2+x1;
if(x6>x5) x4--;
int mm=search(x3,x4);
yy=10*x1+x2;
if(mm>=100)
{
x3=0;
x4=0;
mm=search(x3,x4);
yy=search1(x1,x2);
}
if(mm<10)
printf("%d0%d",yy,mm);
else if(yy<10)
printf("0%d%d",yy,mm);
else if(mm<10&&yy<10)
printf("0%d0%d",yy,mm);
else
printf("%d%d",yy,mm);
x1=yy/10;
x2=yy%10;
x3=mm/10;
x4=mm%10;
yy1=x2*10+x1;
mm1=x4*10+x3;
if(x2==0&&x4!=0) printf("%d0%d\n",mm1,yy1);
else if(x4==0&&x2!=0) printf("0%d%d\n",mm1,yy1);
else if(x2==0&&x4==0) printf("0%d0%d\n",mm1,yy1);
else printf("%d%d\n",mm1,yy1);
}
void Hui1(long a,int *x,int *y)
{
for(int i=0;ix1=a/10000000;
x2=(a/1000000)%10;
x3=(a/100000)%10;
x4=(a/10000)%10;
x5=a%10000;
x6=1000*x4+100*x3+10*x2+x1;
if(x6>x5) x4--;
int mm=search(x3,x4);
yy=10*x1+x2;
if(mm>=100)
{
x3=0;
x4=0;
mm=search(x3,x4);
yy=search1(x1,x2);
}
if(mm==yy)
{
if(mm<10)
printf("%d0%d",yy,mm);
else if(yy<10)
printf("0%d%d",yy,mm);
else if(mm<10&&yy<10)
printf("0%d0%d",yy,mm);
else
printf("%d%d",yy,mm);
x1=yy/10;
x2=yy%10;
x3=mm/10;
x4=mm%10;
yy1=x2*10+x1;
mm1=x4*10+x3;
if(x2==0&&x4!=0) printf("%d0%d\n",mm1,yy1);
else if(x4==0&&x2!=0) printf("0%d%d\n",mm1,yy1);
else if(x2==0&&x4==0) printf("0%d0%d\n",mm1,yy1);
else printf("%d%d\n",mm1,yy1);
break;
}
else {
a=a+10000;
continue;
}}
}
int search(int x3,int x4)
{
x4++;
int mm=0,mm1=0;
for(int i=0;imm=10*x3+x4;
mm1=10*x4+x3;
if(mm1<=12)
break;
else
{
int mm2=mm;
mm2++;
x3=mm2/10;
x4=mm2%10;
}
}
return mm;
}
int search1(int x1,int x2)
{
x2++;
int yy=0,yy1=0;
for(int i=0;iyy=10*x1+x2;
yy1=10*x2+x1;
if(yy1<=30)
break;
else
{
int yy2=yy;
yy2++;
x1=yy2/10;
x2=yy2%10;
}
}
return yy;
}
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int nian[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int n;
cin>>n;
n/=10000;
n++;
string a1,a2;
int flag1=0,flag2=0;
for(int i=n;i<9999;i++)
{
string a=to_string(i);
int mm,dd;
mm=(a[3]-'0')*10+a[2]-'0';
dd=(a[1]-'0')*10+a[0]-'0';
// cout<<i<<' '<<mm<<' '<<dd<<endl;2
if(i%4==0&&i%100!=0||i%400==0)
nian[3]=29;
else
nian[3]=28;
if(mm>0&&mm<=12&&dd<=nian[mm])
{
if(flag1==0)
{
a1=a;
reverse(a.begin(),a.end());
a1+=a;
flag1=1;
}
if(dd==mm&&flag2==0)
{
a2=a;
reverse(a.begin(),a.end());
a2+=a;
flag2=1;
}
}
if(flag1&&flag2)
break;
}
cout<<a1<<endl;
cout<<a2;
}
https://blog.csdn.net/fakerzhang/article/details/123943254