一、问题
题目描述
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
二、python代码
import os # 导入操作系统模块
import sys # 导入系统模块
import datetime # 导入datetime模块,用于处理日期和时间。
# 从用户输入获取一个字符串N,代表一个日期,格式为YYYYMMDD。
N=input()
# 将用户输入的字符串N转换为年、月和日的整数形式。
yy=int(N[0:4])
mm=int(N[4:6])
dd=int(N[6:])
# 使用datetime模块创建一个日期对象,格式为YYYY-MM-DD。
date=datetime.date(yy,mm,dd)
flag=True # 初始化一个标志变量,用于控制是否打印第一个满足条件的日期。
# 从用户输入的日期开始,向后遍历9999999天。
for i in range(9999999):
date=date+datetime.timedelta(days=1) # 日期向后增加一天。
strdate=str(date).replace("-",'') # 将日期对象转换为字符串,并去掉"-"。
# 如果字符串形式的日期等于其反转后的字符串,打印该日期。
if strdate==strdate[::-1]:
if flag: # 如果这是第一个满足条件的日期,打印。
print(strdate)
flag=False # 设置标志为False,表示已经打印过第一个满足条件的日期。
# 如果日期的第1、2、3、4、5位或最后一位是相同的数字,并且第2、3、4位也相同,打印该日期。
if strdate[0]==strdate[2]==strdate[5]==strdate[-1] and strdate[1]==strdate[3]==strdate[4]==strdate[-2]:
print(strdate)
break # 找到一个满足条件的日期后,跳出循环。