思路
这道题的思想是枚举,我们只要列出全部的日期字符串然后逐一遍历判断就能得到结果了。
由题意可知组成一个顺子至少要3个数,所以只需要在日期字符串中三个一组来判断是否是顺子,如果找到一个顺子就给累加器ans加1然后break,继续判断下一个日期。题目中固定了是2022年,如果想要顺子出现在2022后面是不可能的,因为能在这组成的日期只有202234xx,显然可以排除,所以所需要的日期字符串就不用加上2022了。这样一来,每个日期字符串最多只需要判断2次,即前三个数和后三个数。在日期字符串里,只有一位数的月份或日期前需要补0,我们可以使用f"{num:02}"的办法实现。
代码
days = [0,31,28,31,30,31,30,31,31,30,31,30,31]
#把每个月的日期例举出来从而索引对应月份,所以第一个元素放一个0来补位
ans = 0#统计顺子日期个数
for m in range(1,13):#遍历月
mm = f"{m:02}"
for d in range(1,days[m]+1):#遍历日
dd = f"{d:02}"
s = mm + dd#连接月和日
for i in range(2):#判断是否有顺子
if int(s[i]) + 1 == int(s[i+1]) and int(s[i]) + 2 == int(s[i+2]):
ans += 1
break
print(ans)