解题思路:用日期遍历会超时,由于回文的特殊性,可以根据年份构造month和day;
注意事项:(注意判断构造的日期是否合法);
参考代码:
#include <iostream> using namespace std; int arr[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//保存每月的最后一天 bool check(int j) { arr[2]=28; //非闰年,2月28天,若为闰年,重新赋值为29即可 int q,p,month,day;//分离month,day q=j%10;//第四位数 if(q==0)//year=2020,month=02(这一类情况,去零),month取第三位数即可 month=(j/10)%10; else //例如:year=3211,month=11,month保存第四,三位数 month=q*10+(j/10)%10; p=(j/100)%10;//第二位数 if(p==0)//year=2020,day02(这一类情况,去零),day取第一位数即可 day=(j/1000)%10; else //例如:year=3211,day=23,day保存第二,一位数 day=p*10+(j/1000)%10; if(j%4==0&&j%100!=0||j%400==0)//闰年处理,2月份为29天 { arr[2]=29; } if(month>=1&&month<=12&&day>=1&&day<=arr[month])//如果日期合法 return true; else return false; } int main() { int date,year,cunt=0; cin>>date; year=date/10000; for(int i=year;i<=9999;i++)//遍历年份,一开始忽略了初始输入不为回文的情况,以为这一年不用考虑,故只有91分,改了好久...... { if(check(i))//判断年份所对应的(回文保存)month,day是否合法 { int A1,A2,B1,B2;//分离每一位数 A1=(i/1000)%10; A2=(i/10)%10; B1=(i/100)%10; B2=i%10; int time=i*10000+B2*1000+A2*100+B1*10+A1; //根据每一位合成日期 if(cunt==0&&time!=date) //只输出一次 ,且不为输入日期 { cout<<time<<endl; cunt++; } if(A1==A2&&B1==B2&&time!=date)//ABAB型 { cout<<time; return 0; //结束程序 } } } return 0; }
0.0分
0 人评分
用筛法求之N内的素数。 (C语言代码)浏览:1222 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:992 |
WU-拆分位数 (C++代码)浏览:775 |
用筛法求之N内的素数。 (C语言代码)浏览:664 |
矩阵加法 (C语言代码)浏览:1719 |
Hello, world! (C语言代码)浏览:714 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:696 |
数组输出 (C语言代码)浏览:699 |
10月月赛题解浏览:536 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:485 |