蓝桥杯python stema
时间: 2025-06-14 21:44:34 浏览: 13
### 蓝桥杯 Python STEMA 题目及解答
蓝桥杯竞赛中,Python 语言的题目通常涵盖了基础语法、数据结构、算法设计以及逻辑思维等多个方面。以下是与蓝桥杯 Python STEMA 相关的一些典型题目及其解题思路。
#### 1. **三角形判断**
题目描述:输入三个数,判断它们是否可以构成一个三角形。如果可以,进一步判断是何种类型的三角形(等边、等腰或普通三角形)。
```python
# 输入三个边长
a, b, c = map(int, input().split())
# 排序以简化判断
sides = sorted([a, b, c])
# 判断是否能构成三角形
if sides[0] + sides[1] > sides[2]:
if a == b == c:
print("等边三角形")
elif a == b or b == c or a == c:
print("等腰三角形")
else:
print("普通三角形")
else:
print("无法构成三角形")
```
上述代码通过 `input()` 函数获取用户输入,并使用 `sorted()` 函数对边长进行排序[^4]。根据三角形的基本性质和边长关系,判断其类型。
---
#### 2. **充电器问题**
题目描述:给定若干个充电器和设备,每个设备需要特定电压的充电器才能正常工作。问最多有多少设备可以匹配到合适的充电器。
```python
def max_match(devices, chargers):
devices.sort()
chargers.sort()
i = j = count = 0
while i < len(devices) and j < len(chargers):
if abs(devices[i] - chargers[j]) <= 1:
count += 1
i += 1
j += 1
elif devices[i] < chargers[j]:
i += 1
else:
j += 1
return count
devices = list(map(int, input().split()))
chargers = list(map(int, input().split()))
print(max_match(devices, chargers))
```
该问题的核心在于双指针法的应用,同时结合排序操作以优化匹配效率[^2]。
---
#### 3. **斐波那契数列**
题目描述:计算第 n 项斐波那契数列的值。
```python
def fibonacci(n):
if n <= 1:
return n
dp = [0] * (n + 1)
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
n = int(input())
print(fibonacci(n))
```
动态规划方法被广泛应用于解决此类递归问题,通过存储中间结果避免重复计算,从而提高效率[^3]。
---
#### 4. **爬楼梯问题**
题目描述:假设你正在爬楼梯,每次可以选择爬 1 级或 2 级台阶。问有多少种不同的方式可以爬到第 n 级台阶。
```python
def climb_stairs(n):
if n <= 1:
return 1
dp = [0] * (n + 1)
dp[0], dp[1] = 1, 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
n = int(input())
print(climb_stairs(n))
```
此问题同样可以通过动态规划解决,其状态转移方程为 `dp[i] = dp[i-1] + dp[i-2]`[^3]。
---
#### 5. **最长公共子序列**
题目描述:给定两个字符串,求它们的最长公共子序列长度。
```python
def lcs_length(text1, text2):
m, n = len(text1), len(text2)
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 1):
if text1[i - 1] == text2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
return dp[m][n]
text1 = input()
text2 = input()
print(lcs_length(text1, text2))
```
动态规划在此问题中的应用体现在二维数组的状态转移上,通过比较字符是否相等来更新状态表。
---
###
阅读全文
相关推荐

















