资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd”的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上“千年一遇”,顶多算“千年两遇”。
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
输入格式
输入包含一个八位整数 N,表示日期。
输出格式
第一行表示下一个回文日期,
第二行表示下一个 ABABBABA 型的回文日期。
输入样例
20200202
输出样例
20211202
21211212
数据范围
对于所有评测用例,10000101 ≤ N ≤ 89991231,保证 N 是一个合法日期的 8 位数表示。
def check1(date):# 判断是否为回文日期
if date == date[::-1]:
return True
return False
def check2(date):# 判断是否为ABABBABA型
if check1(date):
if date[:4] == date[4:][::-1]:
if date[:2] == date[2:4]:
return True
return False
if __name__ == "__main__":
date = int(input())
year = int(date / 10000) # 年份
month = int(date % 10000 / 100) # 月份
day = date % 100 + 1 # 天数
# 闰年2月有29天--year % 400 == 0 || (year % 4 == 0 && year % 100 != 0
flag = True # 标记查找回文日期是否停止
flag2 = True # 标记查找ABABBABA型是否停止
date1 = "" # 回文日期
date2 = "" # ABABBABA型日期
while(flag or flag2): # 一次while循环就循环一年的每一天
# 循环月份
for m in range(month,13):
days = 0
# 判断二月的天数
if m == 2:
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
days = 29 # 闰年2月份29天
else:
days = 28
elif m in [4,6,9,11]:
days = 30 # 小月
else:
days = 31 # 大月
for d in range(day, days):
tmp = str(year) + str('%02d'%m) + str('%02d'%d)
if flag and check1(tmp):
date1 = tmp
flag = False
if check2(tmp):
date2 = tmp
flag2 = False
year += 1 # 如果没有找到往下一年继续找,年份加1
month = 1 # 新的年份从1月开始
day = 1 # 从1号开始
print(date1)
print(date2)