赣州人才网官方网站,如何增加网站会员,做网站赚钱吗?,网络营销论坛推广原题链接#xff1a;2867. 回文日期 - AcWing题库
2020 年春节期间#xff0c;有一个特殊的日期引起了大家的注意#xff1a;2020 年 2 月 2 日。
因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202#xff0c;恰好是一个回文数。
我们称这样的日期是…原题链接2867. 回文日期 - AcWing题库
2020 年春节期间有一个特殊的日期引起了大家的注意2020 年 2 月 2 日。
因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202恰好是一个回文数。
我们称这样的日期是回文日期。
有人表示 20200202 是“千年一遇” 的特殊日子。
对此小明很不认同因为不到 22 年之后就是下一个回文日期20211202 即 2021 年 12 月 2 日。
也有人表示 20200202 并不仅仅是一个回文日期还是一个 ABABBABA 型的回文日期。
对此小明也不认同因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期21211212 即 21212121 年 12 月 12 日。
算不上“千年一遇”顶多算“千年两遇”。
给定一个 8 位数的日期请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
注意 本题数据保证一定有解。
注意
下一个回文日期和下一个 ABABBABA 型的回文日期可能是同一天。
ABABBABA 型的回文日期需要满足 A≠B。
输入格式
输入包含一个八位整数 N表示日期。
输出格式
输出两行每行 1 个八位数。
第一行表示下一个回文日期第二行表示下一个 ABABBABA 型的回文日期。
数据范围
对于所有评测用例10000101≤N≤89991231保证 N 是一个合法日期的 88 位数表示。
输入样例
20200202输出样例
20211202
21211212 模拟题按照思路直接写即可注意判断闰年和月份。
AC代码
#includeiostream
using namespace std;
bool found1false,found2false;//found1为下一个回文日期判断是否找到,found2ABABBABA 型的回文日期
int months[]{0,31,28,31,30,31,30,31,31,30,31,30,31};//月份天数数组
int is_leap(int year){//判断是否为闰年if(year%40year%100||year%4000){return 1;}return 0;
}
int get_day(int year,int month){//获取天数if(month2){return 28is_leap(year);}return months[month];
}
void next_day(int y,int m,int d){//自增到下一天d;if(dget_day(y,m)){d1;m;if(m12){m1;y;}}
}
bool cheak1(char s[]){//判断日期是否为回文日期for(int i0,j7;ij;i,j--){if(s[i]!s[j]){return false;}}return true;
}
bool cheak2(char s[]){//判断是否为ABABBABA 型的回文日期char as[0];char bs[1];char cs[2];char ds[3];if(acbda!b){return true;}return false;
}
int main(){int y,m,d;char s[10];//中介作用负责转化scanf(%04d%02d%02d,y,m,d);while(!found1||!found2){next_day(y,m,d);sprintf(s,%04d%02d%02d,y,m,d);if(cheak1(s)){if(!found1){found1true;puts(s);}if(!found2cheak2(s)){found2true;puts(s);}}}return 0;
}
文章尚有不足请各位大佬指出共同冲刺蓝桥杯。