蓝桥杯python2023
时间: 2025-05-19 21:10:26 浏览: 25
### 2023年蓝桥杯Python试题及解答
#### A题:不含2023的数字统计
此题要求计算在区间 `[12345678, 98765432]` 的范围内,有多少个数完全不包含子序列 `2023`。这里的“完全不包含”意味着即使删除某些位也不能形成 `2023`。
解决方法可以通过暴力枚举法实现,逐一遍历该区间的每一个数字并判断其是否满足条件:
```python
def contains_2023(n):
s = str(n)
length = len(s)
for i in range(length - 3):
if s[i:i+4] == '2023':
return True
# 检查是否存在其他方式组合成'2023'
from itertools import combinations
digits = list(str(n))
for comb in combinations(digits, 4):
if ''.join(comb) == '2023':
return True
return False
count = 0
for num in range(12345678, 98765432 + 1):
if not contains_2023(num):
count += 1
print(count)
```
上述代码定义了一个函数来检测某个数字是否可能通过任何方式组成字符串 `'2023'`[^2]。
---
#### B题:硬币兑换的最大次数
给定两枚硬币的价值范围均为 `[1, 2023]`,求能够组成的最大金额对应的兑换次数。具体逻辑如下所示:
```python
result = [0] * 4047 # 枚举所有可能的总价值情况
for i in range(1, 2024): # 遍历第一种硬币面额
for j in range(i, 2024): # 遍历第二种硬币面额
if i == j: # 如果两者相同,则最多能用一半数量进行交换
result[i + j] += (i // 2)
elif i < j: # 不同情况下取较少的那个作为上限
result[i + j] += i
max_exchange_times = max(result)
print(max_exchange_times)
```
这段程序利用双重循环穷尽每一对硬币组合的可能性,并记录下它们各自贡献了多少次有效的兑换操作[^4]。
---
#### C题:字符匹配计数器
对于输入的一串字符序列,按照特定规则解析其中符合模式的部分并累加结果。以下是基于样例给出的一个简单版本解释:
```python
s = input().strip()
l = ["00", "11", "1?", "?1", "0?", "?0", "??"]
ans = 0
i = 1
while i < len(s):
pair = s[i - 1:i + 1]
if pair in l:
ans += 1
i += 2
else:
i += 1
print(ans)
```
这里主要运用滑动窗口技巧逐一比较相邻两位是否落入预设集合之中[^3]。
---
阅读全文
相关推荐















