回文日期
目录
题目描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
题目链接:
题解:
import os
import sys
import datetime
# 请在此输入您的代码
date=input()
y=int(date[0:4]) # 将输入的日期转化为年月日的形式
m=int(date[4:6])
d=int(date[6:])
dd=datetime.date(y,m,d) # 将y,m,d转化为日期格式
flag=True # 输出一次回文日期
for i in range(9999999):
dd=dd+datetime.timedelta(days=1) # 日期增加1天
strdd=str(dd).replace('-','') # 将日期转换为字符串的形式并将其中的-符号去掉
if strdd==strdd[::-1]:
if flag:
print(strdd)
flag=False
if strdd[0]==strdd[2]==strdd[-1]==strdd[-3] and strdd[1]==strdd[3]==strdd[-2]==strdd[-4] :
print(strdd)
break
1.思路分析:
进行回文日期的寻找,要在原日期的基础上进行遍历寻找,但此时的数据类型应该是日期类型,不能用int类型进行遍历,先将其转换成日期格式,对日期每次加一进行判断,在判断时要注意先寻找回文日期,再寻找满足ABABBABA类型的日期。但是两种日期都是回文日期,要先判断是回文日期,输出第一个回文日期,找到第一个回文日期之后再找到的满足回文日期条件的出来ABABBABA类型的都不再输出,此时添加了一个flag变量,如果flag是初始值,证明原来没有输出过回文日期,输出之后改变flag的值,以后再有满足条件的数便不再输出。再继续遍历,判断满足ABABBABA类型的日期输出之后退出循环。
2.python中datetime库的使用:
一些常用的方法:
import datetime as dt
# 返回当前日期和时间
date_now = dt.datetime.now()
print(date_now)
# 返回当前日期,date()的对象为日期类型
date_now1 = dt.datetime.now().date()
print(date_now1)
#直接返回当前日期
date_now2 = dt.date.today()
print(date_now2)
# 日期替换
date = dt.date.today().replace(year=2012,month=12,day=25)
print(date)
#获取日期中的天
date1 = date.day
print(date1)
# 日期运算
date2 = dt.timedelta(days=7)
print(date2)
date3 = date+date2
print(date3)
# 生成日期,其中年月日的数据类型为整型
date4 = dt.date(2014,5,6)
print(date4) #此时数据类型为日期类型以 - 连接
# 格式化日期
print(date4.strftime("%Y/%m:%d"))
print(date4.strftime("%m/%d/%Y"))
测试结果:
2022-12-30 15:38:22.554331
2022-12-30
2022-12-30
2012-12-25
25
7 days, 0:00:00
2013-01-01
2014-05-06
2014/05:06
05/06/2014
3.python中的一些字符串操作:
str = "abc"
print(str)
# 倒序输出字符串
print(str[::-1])
# 修改字符串中某个值
# str[0] = 'd' #直接在字符串修改会报错
# print(str)
li = list(str)
li[0] = 'd'
str1 = ''.join(li)
print(str1)
#判断字符串中某个字符在字符串中出现的次数,返回值类型为整型
str2 = 'bbbcccdd'
a = str2.count('b')
print(a)
#去除字符串两边的空格
str3 = " a b c "
print(str3.strip())
# 去除左边空格
print(str3.lstrip())
# 去除右边空格
print(str3.rstrip())
#将字符串中某个字符串替换成另一个字符串
str3 = str3.replace('a','aa')
print(str3)
测试结果:
abc
cba
dbc
3
a b c
a b c
a b c
aa b c