话不多说 上满分证明:
代码设计思路:根据测样的范围 枚举出大致范围内所有的回文数
遍历它 找到第一个大于N的数字 输出
找到第一个大于N且符合ABABBABA的数字(B!=A) 输出
思路非常简单
现在关键在于 我们要怎么枚举呢?
首先 日期一定要合法 有以下标准:大月不超过31天 小月不超过30天
闰年(可以被400整除的年份)2月不超过29天 非闰年2月不会超过28天
由于回文数左右对称 我们需要关注前4位
其次根据数据范围10000101<=N<=89991231
如果N=10000101 答案一定大于10000000
如果N=89991231 答案一定小于99999999
因此对于前4位 我们需要遍历(1000,9999)来创建合法的回文日期数的列表
答案一定落在列表这个里面
a=['01','02','03','04','05','06','07','08','09','10','11','12']#月份 b=['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31']#日期 s=[] for i in range(1000,9999): if str(i)[::-1][:2] in a and str(i)[::-1][2:] in b: s.append(str(i)+str(i)[::-1]) for i in s:#去除不合法二月日期 if i[4:6]=='02': if int(i)%400!=0 and int(i[6:])>28: s.remove(i) if int(i)%400==0 and int(i[6:])>29: s.remove(i) big=['01','03','05','07','08','10','12'] small=['02','04','06','09','11'] for i in s:#去除不合法大小月 if i[4:6] in small and int(i[6:])>30: s.remove(i) if i[4:6] in big and int(i[6:])>31: s.remove(i) N=int(input()) for i in s: if int(i)>N: print(i) break for j in s: if int(j)>N and j[:2]==j[2:4] and j[0]!=j[1]: print(j) break
最近疫情有点严重减少出门 在家好好刷题
备战蓝桥杯 acwing,leedcode,蓝桥官网都是不错的
乾坤未定 你我皆是蓝桥黑马