题目:
小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的范围之内。数组中的元素从左至右如下所示:5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3现在他想要从这个数组中寻找一些满足以下条件的子序列:子序列的长度为 8;
这个子序列可以按照下标顺序组成一个 yyyymmdd 格式的日期,并且要求这个日期是 2023 年中的某一天的日期,例如 20230902,20231223。yyyy 表示年份,mm 表示月份,dd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。
请你帮小蓝计算下按上述条件一共能找到多少个不同 的 2023 年的日期。对于相同的日期你只需要统计一次即可。
思路
这道题是要我们从给出的元素里面找出表示日期中的一天,即八位元素(日期中的天数只有一位时要补零) 我们可以换一种思维,即是利用Python中的datetime属性列出从2023年1月1日到2023年12月31日的日期,然后循环来跟给出的元素来匹配每种可能都循环一遍
from datetime import datetime, timedelta
st = '''5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2
7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1
0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3'''
st = list(st.split()) # 将多行原始数字字符串转换为一个整数列表,其中每个整数都是原始字符串中的一个数字
# print(st)
date1 = datetime(2023, 1, 1)
date2 = datetime(2023, 12, 31)
count = 0
while date2 > date1:
date = date1.strftime('%Y%m%d') # 格式化时间 返回可读字符串来表示时间 即返回:20230101
num = 0
for i in range(len(st)):
if num == 8:
count = count + 1
break
if date[num] == st[i]:
num = num + 1
date1 = date1 + timedelta(days=1)
print(count)