好数蓝桥杯python
时间: 2025-05-18 20:08:12 浏览: 22
### 蓝桥杯 Python 练习题及解析
#### 题目背景
蓝桥杯大赛作为一项面向全国高校学生的编程竞赛活动,提供了丰富的练习资源。以下是基于历年真题整理的 Python 相关题目及其解析。
---
#### 1. 带宽问题
##### **题目描述**
给定一组网络节点之间的连接关系以及每条边的最大传输速率(即带宽),求从源节点到目标节点的最大流量。
##### **思路分析**
该问题是经典的图论最大流问题,可以采用 Ford-Fulkerson 或 Edmonds-Karp 算法解决。通过构建邻接矩阵表示图并不断寻找增广路径来更新残余容量,直到无法找到新的增广路径为止[^1]。
##### **代码实现**
```python
from collections import defaultdict, deque
def bfs(graph, source, target, parent):
visited = set()
queue = deque([source])
while queue:
u = queue.popleft()
for idx, val in enumerate(graph[u]):
if idx not in visited and val > 0:
queue.append(idx)
visited.add(idx)
parent[idx] = u
if idx == target:
return True
return False
def ford_fulkerson(graph, source, target):
parent = [-1] * (len(graph))
max_flow = 0
while bfs(graph, source, target, parent):
path_flow = float('Inf')
s = target
while s != source:
path_flow = min(path_flow, graph[parent[s]][s])
s = parent[s]
max_flow += path_flow
v = target
while v != source:
u = parent[v]
graph[u][v] -= path_flow
graph[v][u] += path_flow
v = parent[v]
return max_flow
```
---
#### 2. 纯质数
##### **题目描述**
定义纯质数为一个正整数本身是质数且其各位数字之和也是质数。输入一个范围 `[a, b]`,找出其中所有的纯质数。
##### **思路分析**
先利用埃拉托色尼筛法预处理一定范围内的所有质数集合,再逐一遍历区间中的每个数判断是否满足条件。对于每一位数字相加的结果也需要验证是否属于质数集[^2]。
##### **代码实现**
```python
import math
def sieve_of_eratosthenes(limit):
is_prime = [True] * (limit + 1)
p = 2
while p * p <= limit:
if is_prime[p]:
for i in range(p * p, limit + 1, p):
is_prime[i] = False
p += 1
primes = []
for p in range(2, limit + 1):
if is_prime[p]:
primes.append(p)
return set(primes)
def pure_primes(a, b):
prime_set = sieve_of_eratosthenes(b)
result = []
for num in range(max(2, a), b + 1):
if num in prime_set:
digit_sum = sum(int(digit) for digit in str(num))
if digit_sum in prime_set:
result.append(num)
return result
```
---
#### 3. 完全日期
##### **题目描述**
给出两个日期字符串 `start_date` 和 `end_date`,计算两者之间完整的天数差值。
##### **思路分析**
使用 Python 的标准库模块 `datetime` 来解析日期,并调用 `.date()` 方法获取具体日期对象后做减法运算即可得到时间间隔。注意闰年的特殊处理逻辑已内置支持。
##### **代码实现**
```python
from datetime import datetime
def days_between_dates(start_date_str, end_date_str):
start_date = datetime.strptime(start_date_str, "%Y-%m-%d").date()
end_date = datetime.strptime(end_date_str, "%Y-%m-%d").date()
delta = abs((end_date - start_date).days)
return delta
```
---
#### 4. 最小权值
##### **题目描述**
在一个无向连通图中选取若干条边使得任意两点间均存在至少一条路径相连,同时所选边总权重尽可能小。
##### **思路分析**
此乃典型的最小生成树问题,可选用 Kruskal 或 Prim 算法完成任务。Kruskal 更适合稀疏图场景下操作效率更高;Prim 则适用于稠密图环境更优。
##### **代码实现**
```python
class UnionFind:
def __init__(self, n):
self.parent = list(range(n))
def find(self, x):
if self.parent[x] != x:
self.parent[x] = self.find(self.parent[x]) # Path compression
return self.parent[x]
def union(self, x, y):
rootX = self.find(x)
rootY = self.find(y)
if rootX != rootY:
self.parent[rootY] = rootX
def kruskal(edges, nodes_count):
edges.sort(key=lambda edge: edge[2]) # Sort by weight
uf = UnionFind(nodes_count)
mst_weight = 0
selected_edges = []
for u, v, w in edges:
if uf.find(u) != uf.find(v): # No cycle formed
uf.union(u, v)
mst_weight += w
selected_edges.append((u, v, w))
return mst_weight, selected_edges
```
---
#### 5. 大写转换
##### **题目描述**
将一段英文文本中的单词首字母全部改为大写字母形式输出。
##### **思路分析**
借助字符串方法 `.capitalize()` 对单个词进行大小写调整,或者整体应用 `.title()` 函数快速达成目的。
##### **代码实现**
```python
def capitalize_words(sentence):
words = sentence.split()
capitalized_words = [word.capitalize() for word in words]
return ' '.join(capitalized_words)
```
---
####
阅读全文
相关推荐














