愿尔安然无恙


私信TA

用户名:H2130819045

访问量:12591

签 名:

向往星辰大海,喜欢落日晚风。

等  级
排  名 59
经  验 10521
参赛次数 16
文章发表 56
年  龄 20
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

不想改bug ^_^

解题思路:用日期遍历会超时,由于回文的特殊性,可以根据年份构造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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区