这份文档包含了针对Python编程爱好者的蓝桥杯竞赛题目及其参考答案,旨在帮助学习者提高编程技能和竞赛水平。
蓝桥杯题库及答案 Python 版
这是一道结果填空的题目,只需要算出一个整数作为结果提交即可。
输入字符串后计算其不同子串的数量:
```python
input_str = input()
num = len(input_str)
searched = []
for i in range(num):
for j in range(num - i): # 确保不超出范围
substring = str(input_str[j:j + i + 1])
if substring not in searched:
searched.append(substring)
print(len(searched))
```
输出结果为:100
(2)年号字串问题:
小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于大于等于27的数字,则使用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对应 28,LQ 对 应329。请问数字 2019 对应的是哪个字符串?
这题实际上是一个进制转换问题,将十进制数转化为以字母表示的“26进制”。
```python
string = ABCDEFGHIJKLMNOPQRSTUVWXYZ
num = 2019
yu = []
while num >= 26:
yu.append(num % 26)
num //= 26
yu.append(num)
for i in yu[::-1]:
print(string[i - 1], end=)
```
该代码会输出结果为 BYQ。
### 蓝桥杯题库及答案 Python 编程版知识点解析
#### 第一:字符串子串统计
编写一个Python程序,读取输入的字符串,并统计其中所有不同子串的数量。
```python
input_str = input()
num = len(input_str)
searched = []
for i in range(num):
for j in range(num - i): # 确保不超出范围
substring = str(input_str[j:j + i + 1])
if substring not in searched:
searched.append(substring)
print(len(searched))
```
解析:这段代码实现了对输入字符串中的所有可能子串进行统计,并打印出这些子串的数量。它通过两层嵌套循环遍历字符串的所有子串,使用列表`searched`来存储已遇到的不同子串以避免重复计算。
#### 第二:年号字串
根据小明设计的编码规则,用字母A到Z分别代表数字1到26,对于大于等于27的数字,则使用两位或更长位字符串表示。例如 AA 对应 27, AB 对应 28 等等。
```python
string = ABCDEFGHIJKLMNOPQRSTUVWXYZ
num = 2019
yu = []
while num >= 26:
yu.append(num % 26)
num //= 26
yu.append(num)
for i in yu[::-1]:
print(string[i - 1], end=)
```
解析:此题可以通过将十进制数转换为以字母表示的“26进制”来解决。通过循环不断地将`num`除以26取余,保存到列表中,并映射到对应的字符串。
#### 第三:数列求值
给出一个数列的前几项1, 1, 1, 3, 5, 9, 17,…,从第四项开始每一项都是前三项之和。要求计算第N项的最后4位数字。
```python
N = # 输入 N 的值
arr = [0] * N
arr[0] = arr[1] = arr[2] = 1
for i in range(3, N):
arr[i] = (arr[i - 1] + arr[i - 2] + arr[i - 3]) % 10000
print(arr[N - 1])
```
解析:通过动态规划的方式构建数列,每次计算新项时都保留最后四位数字,最终输出第N项的最后4位数字。
#### 第四:数的分解
将数字2019分解为3个各不相同的正整数之和,并且每个整数中不能包含数字2和4。求有多少种不同的分解方法(不考虑顺序)。
```python
n = 2019
count = 0
def check(n):
n_str = list(str(n))
if 2 not in n_str and 4 not in n_str:
return True
return False
for i in range(1, 676):
for j in range(i + 1, min(1345, n - i)):
if check(i) and check(j):
k = n - i - j
if