题目描述

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

代码示例

import os
import sys
import datetime # python中的日期库提供多种日期和时间表达式

# 请在此输入您的代码
st = input() # 输入合法的日期
y = int(st[:4]) # 取出日期中的年份
m = int(st[4:6]) # 取出月份
d = int(st[6:]) # 取出日份
flag = True # 用来判断结束
date = datetime.date(y, m, d) # 检查输入的日期是否合规

for i in range(9999999): # 通过for循环来查找回文日期,range后面的数字代表将要循环的次数但不一定是必须进行的次数
date = date + datetime.timedelta(days=1) # datatime.timedelata函数可按日期的规范增加天数
date_str = str(date).replace('-', '') # 将日期中间的'-'去掉,方便后面的比较
if date_str[:] == date_str[::-1]: # str[:]代表的是正序输出,str[::-1]代表的是倒序输出,两者比较是否为回文日期
if flag: # 题目要求的是输一次回文日期和一次ababbaba型的,则用布尔类型来控制输出次数
print(date_str)
flag = False # 若输出一次后,使flag为False,则这个if语句将不再执行
if date_str[0] == date_str[2] == date_str[5] == date_str[7] and \
date_str[1] == date_str[3] == date_str[4] == date_str[6]: # 判断回文日期是否满足ababbaba型
print(date_str)
break # 若满足则结束循环

点击并拖拽以移动

[可参考kpython中字符截取-1]、[:-1]、[::-1]、[n::-1]等使用方法的详细讲解(建议留存) - @ 小浩 - 博客园 (cnblogs.com) https://www.cnblogs.com/xiohao/p/11261809.html

可参考

蟒蛇 |datetime.timedelta() 函数 - GeeksforGeeks https://www.geeksforgeeks.org/python-datetime-timedelta-function/

datetime.date(year, month, day):
year : 表示年,范围[MINYEAR, MAXYEAR],即[1, 9999]
month : 表示月,范围[1, 12]
day :一月中第几天,最大值根据给定的year,month参数来决定。例如闰年2月份有29天