蓝桥杯--回文日期
题目描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 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
思路: 暴力枚举:将输入数据后面的日期一一枚举出来,并判断是否回文和ABAB类型
【蓝桥杯--回文日期】因为日期太长了,所以要用字符串表示,
#include
#include
using namespace std;
string s;
int year,month,day;
int month1,day1;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool flag1=false,flag=true;
//flag 判断是否是第一次循环;flag1:判断是找到回文bool solve1(string s)//判断回文的方法
{
for(int i=0;
i<=s.size()/2;
i++)
{
if(s[i]!=s[s.size()-i-1])//要注意减一,因为是
{
return false;
}
}
return true;
}
bool solve2(string s)//判断是否是ABAB型的
{
if(s[0]==s[2]&&s[1]==s[3])
{
return true;
}
return false;
} void solve(string s)//处理问题的方法:将年月日结合起来,然后进行判断
{
//stoll函数将在函数调用中作为参数提供的字符串转换为long long int
year=stoll(s.substr(0, 4));
month=stoll(s.substr(4, 2));
day=stoll(s.substr(6, 2));
//把年月日分割开来,分别赋值给year,month 和day
//先判断year 是闰年还是平年
for(int i=year;
i;
i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
{
months[2]=29;
}
else
{
months[2]=28;
}
if(flag)//如果是第一次进入该年的循环,那么第一个数就是输入的数本身呢个,所以要加一
{
month1=month;
day1=day+1;
flag=false;
}
else//如果不是第一次进入该年份的循环,证明这个年份已经循环过了,要从头开始循环
{
month1=1;
day1=1;
}//在该年份下面开始月份和日期的循环
for(int j=month1;
j<=12;
j++)
{
for(int k=day1;
k<=months[j];
k++)
{
s=to_string(i);
//to_string函数是将数值转化为字符串
if(j<10)
{
s+="0"+to_string(j);
}
else
{
s+=to_string(j);
}
if(k<10)
{
s+="0"+to_string(k);
}
else
{
s+=to_string(k);
}//每一个操作中要经过两个solve分贝判断回文和ABAB类型
if(solve1(s))//判断是否是回文数字
{
if(!flag1)
{
//如果还没有找到过符合条件的,那么此时该数字就是离输入的数最近的数字
cout<<>s;
solve(s);
return 0;
}
推荐阅读
- 蓝桥杯历届试题|第十一届蓝桥杯 ——子串分值和
- 蓝桥杯历届试题|第十一届蓝桥杯 ——限高杆
- c/c++|蓝桥杯 日期问题(枚举)
- 蓝桥杯|蓝桥杯-新枚举方法应用
- 蓝桥杯|蓝桥杯31天冲刺打卡(Day3)
- 蓝桥杯冲刺题解|蓝桥杯31日冲刺 Day 3
- #|蓝桥杯31天冲刺打卡题解(Day6)
- 蓝桥杯|蓝桥杯AcWing学习笔记 6-1双指针的学习(附相关蓝桥真题(日志统计、完全二叉树的权值))
- #|蓝桥杯31天冲刺打卡题解(Day2)
- #|蓝桥杯31天冲刺打卡题解(Day3)