题解:蓝桥云课 498 回文日期
【题目来源】
蓝桥云课:1.回文日期 - 蓝桥云课
【题目描述】
\(2020\) 年春节期间,有一个特殊的日期引起了大家的注意:\(2020\) 年 \(2\) 月 \(2\) 日。因为如果将这个日期按“yyyymmdd"的格式写成一个 \(8\) 位数是 \(20200202\), 恰好是一个回文数。
我们称这样的日期是回文日期。
有人表示 \(20200202\) 是“千年一遇”的特殊日子。对此小明很不认同,因为不到 \(2\) 年之后就是下一个回文日期:\(20211202\) 即 \(2021\) 年 \(12\) 月 \(2\) 日。
也有人表示 \(20200202\) 并不仅仅是一个回文日期, 还是一个ABAB BABA型的回文日期。对此小明也不认同, 因为大约 \(100\) 年后就能遇到下一个ABAB BABA型的回文日期:
\(21211212\) 即 \(2121\) 年 \(12\) 月\(12\)日。算不上“千年一遇",顶多算“千年两遇"。
给定一个 \(8\) 位数的日期, 请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。
【输入】
输入包含一个八位整数\(N\),表示日期。
对于所有评测用例,\(10000101≤N≤89991231\),保证 \(N\) 是一个合法日期的 \(8\) 位数表示。
【输出】
输出两行, 每行 \(1\) 个八位数。第一行表示下一个回文日期, 第二行表示下一个ABABBABA型的回文日期。
【输入样例】
20200202
【输出样例】
20211202
21211212
【算法标签】
《蓝桥 498 回文日期》 #2020# #模拟# #构造# #省赛#
【解题思路】

【代码详解】
import datetime # 使用内置日期库(避免进行日期有效性判断)
n = input() # 输入n
y = int(n[:4]) # 字符串截取出年月日
m = int(n[4:6])
d = int(n[6:8])
dd = datetime.date(y, m, d) # 生成日期
flag = True # 定义标记位,方便一次循环搞定2次输出
for i in range(1, 89991231): # 无穷遍历
dd = dd+datetime.timedelta(1) # 每次循环日期加1
dd1 = str(dd).replace('-','') # 将其转为字符串
if dd1 == dd1[::-1]: # 如果是回文串(python特有表达方式)
if flag: # 输出异常后标记修改为False,即不再输出(如果分2次输出,最后一个测试点无法通过)
print(dd1)
flag=False
if dd1[0]==dd1[2]==dd1[-1]==dd1[-3] and dd1[1]==dd1[3]==dd1[-2]==dd1[-4]: # 如果符合ABABBABA
print(dd1) # 输出
break
【运行结果】
20200202
20211202
21211212
浙公网安备 33010602011771号