## 蓝桥杯提问,通过率百分之40,想知道哪里有些问题

img

import os
import sys

# 请在此输入您的代码
day = int(input())
for i in range(day+1,99999999):
  i = str(i)
  if int(i[4:6])<=12 and int(i[6:])<=30:
    if str(i) == str(i)[::-1]:
      print(i)
      break
for i in range(day+1,99999999):
  i = str(i)
  if int(i[4:6])<=12 and int(i[6:])<=30:
    if i[0] == i[2] == i[5] ==i[7] and i[1] == i[3] == i[4] == i[6]:
     print(i)
     break

时间复杂度太高,没必要把所有日子都拿出来比较,先构建回文日期和ABABBABA型日期要简单多了。
这里只需要考虑后四位,而且最后一位不能是0。总共只有342个日期,排序后找N后面第一个就好了。


# 回文日期
date = []
for i in (1,3,5,7,8,10,12):
    for j in range(1,32):
        if j%10:
            d = f"{i:0>2}{j:0>2}"
            date.append(d[::-1]+d)
for i in (4,6,9,11):
    for j in range(1,30):
        if j%10:
            d = f"{i:0>2}{j:0>2}"
            date.append(d[::-1]+d)
for j in range(1,30):
    if j%10:
        d = f"02{j:0>2}"
        date.append(d[::-1]+d)

# ABABBABA型日期
date2 = []
for i in range(1,13):
    if i%10:
        d = f"{i:0>2}"*2
        date2.append(d[::-1]+d)

你的算法应该有两个问题,

  1. 日期应该是<=31,
  2. 月份和日期的起始日都应该是1
    也就是你的判断应该是 这样比较合适
if 1 <= int(i[4:6]) <= 12 and 1 <= int(i[6:]) <= 31: