蓝桥杯 日期统计 Python

题目:


小蓝现在有一个长度为 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
<think>好的,我现在需要帮助用户寻找蓝桥杯竞赛中与Python日期处理相关的题目及解答。首先,我要回忆一下用户提供的引用内容,看看是否有相关的信息。 用户提到了四个引用,其中引用[2]是关于“python核酸日期”的题目,引用[3]和引用[4]可能也包含日期处理的题目。根据引用[2],题目可能涉及到计算日期,比如给定一个日期,要求计算之后或之前的某一天。例如,核酸日期问题可能需要计算核酸的有效期,比如两天后的日期。 接下来,我需要确定用户的需求是具体的题目示例和解决方法。可能需要从提供的引用中提取相关题目的描述,并给出Python的解决代码。例如,引用[2]中的核酸日期问题,可能要求输入一个日期,输出n天后的日期,考虑闰年等情况。 然后,我需要考虑如何解析日期Python中的datetime模块可以方便地处理日期加减,但蓝桥杯比赛中有时会限制使用某些库,可能需要手动实现日期计算。不过根据实际情况,datetime模块通常是允许的,所以使用它会更高效。 另外,引用[3]中的试题C是完全日期问题,可能需要判断一个日期是否是完全平方数或其他条件,这涉及到日期的各个部分(年、月、日)的组合处理。例如,将年月日数字连起来形成一个数,判断是否为完全平方数。 最后,整理这些信息,给出具体的题目例子和对应的解答代码,确保代码符合Python语法,并处理好边界情况,比如闰年2月的天数,月份和日期的进位等。同时,可能需要解释解题思路,帮助用户理解如何处理日期相关问题。</think>根据蓝桥杯竞赛中与日期处理相关的Python题目,以下是典型例题及解析: ### 示例1:核酸日期(STEMA选拔赛真题) **题目要求** 输入一个日期(格式:yyyy-mm-dd)和整数n,输出这个日期n天后的日期[^2]。 **解题思路** 1. 使用Python的`datetime`模块处理日期加减 2. 注意跨月、跨年时的自动进位 3. 需处理输入输出格式匹配 **参考代码** ```python from datetime import datetime, timedelta date_str, n = input().split() n = int(n) date = datetime.strptime(date_str, "%Y-%m-%d") result = date + timedelta(days=n) print(result.strftime("%Y-%m-%d")) ``` --- ### 示例2:完全日期(第十二届国赛真题) **题目要求** 若一个日期的年、月、日数值之和是完全平方数,则称为完全日期。 给定时间段(2001-01-01到2021-12-31),统计完全日期数量[^3]。 **关键步骤** 1. 遍历日期范围内的每一天 2. 计算年月日各位数之和 3. 判断是否为完全平方数 **核心代码片段** ```python import math from datetime import datetime, timedelta start = datetime(2001, 1, 1) end = datetime(2021, 12, 31) delta = end - start cnt = 0 for i in range(delta.days + 1): current = start + timedelta(days=i) total = current.year + current.month + current.day s = int(math.sqrt(total)) if s * s == total: cnt += 1 print(cnt) # 正确答案需要实际计算验证 ``` --- ### 示例3:星期计算(省赛模拟题) **题目要求** 已知2023年10月1日是星期日,输入一个2023年的日期,输出对应星期几。 **实现方法** 1. 计算两个日期的差值 2. 使用模7运算确定星期 **代码实现** ```python from datetime import datetime ref_date = datetime(2023, 10, 1) # 已知周日 input_date = datetime.strptime(input(), "%Y-%m-%d") delta = (input_date - ref_date).days weekday = (0 + delta) % 7 # 0代表周日 print(["日","一","二","三","四","五","六"][weekday]) ``` --- ### 日期处理通用技巧 1. **闰年判断**: ```python def is_leap(year): return year % 400 == 0 or (year % 4 == 0 and year % 100 != 0) ``` 2. **月份天数映射**: ```python month_days = [0,31,28,31,30,31,30,31,31,30,31,30,31] if is_leap(year): month_days[2] = 29 ``` 3. **禁止使用datetime时的解法**: 手动计算日期差值时,可采用: - 将日期转换为从基准年开始的总天数 - 处理闰年时每年天数不同的问题 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值