蓝桥杯:回文日期(超详解)

题目:2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个 R 期按“ ymmdd ”沿格式写成一一个8位数是20200202恰好是一个回文数。我们称这样沿旧期是回文日期。
有人表示20200202是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:202112D2即2021年12月2日。

也有人表示20200202并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约100年后就能遇到下一个ABABBABA型的回文日期:21211212即2121年12月12日。算不上“千年一遇”,项多算“千年两遇”。

给定一个8位数的日,请你计算该日期之后下一一个回文日期和下一个ABABBABA型沿回文日期各是哪一天。

分析:需要考虑的问题:

1.数值要比输入的大,

   解决:创建符合条件的list

2.将回文日期分为年份和年份倒序,对正序切片分为月,号,

   解决:整数切片处理,但我一直思考一个问题,例如20200202,月号拆分就是02,02,如果直               接02 == 2,02是错误格式,所以切片的时候计算机自动忽略了02前面的0,将其转化为正               确格式......

3.月份对应天数的判断 

   解决:if,else解决问题

定义函数是较优选择!

huiwen = int(input("输入回文日期:"))   #输入回文日期
def TF(x):   #定义一个函数
  month = int(x[:2])    #输入回文日期的前两位,整数
  day = int(x[2:4])   #输入回文日期的后两位,整数
  x = int(x)    #将其整数化
  if 1 <= month <= 12:    #判断月份,排除2000这种,00为末尾的年份
    if month == 2:    #判断2月份
      if x % 4 == 0:
        if day <= 29:   #判断日期能不能对的上月份的天数,开始逐渐缩小范围
          return True
        else:
          return False
      else:
        if day <= 28:
          return True
        else:
          return False    #使2月份能对的上天数
    if month in [1, 3, 5, 7, 8, 10, 12]:    #判断31天的月份
      if day <= 31:
        return True
      else:
        return False
    else:   #判断剩下的30天的月份
      if day <= 30:
        return True
      return False    #省略else
lt1 = []    #创建空列表容纳满足条件的回文日期,从中选择大于huiwen且最接近的回文日期
lt2 = []
for i in range(1000, 9999):   #个人感觉可以排除很多年份,但是大范围保险一点
  x1 = str(i)[::-1]   #正常回文,字符串
  x2 = (str(i)[:2]+str(i)[:2])[::-1]    #ABAB回文:BABA,字符串
  if TF(x1) and int(x1[::-1] + x1) > huiwen:    #月份和日期符合定义函数要求,
    lt1.append(int(x1[::-1] + x1))    #注意:x1是倒序,x1[::-1]是正序,如果将其写反,会无范围
  if TF(x2) and int(x2[::-1] + x1) > huiwen:
    lt2.append(int(x2[::-1] + x1))

print(min(lt1))
print(min(lt2))

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值