算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分
weights = [15, 20, 12, 18, 25]ports = ["广州", "泉州", "宁波"]
volumes = [5000, 3000, 2000]
for port, vol in zip(ports, volumes):
if vol >= 3000:
print(port)stations = ["长安", "敦煌", "楼兰", "大宛"]
for idx, name in enumerate(stations, start=1):
print(str(idx) + ":" + name)routes = [("长安-敦煌", 500), ("敦煌-楼兰", 300), ("楼兰-大宛", 800)]。执行以下代码后,输出是什么?result = sorted(routes, key=lambda x: x[1], reverse=True)
print(result[0][0])collections 模块的 Counter 来统计商品出现频率。以下代码的输出是什么?from collections import Counter
goods = ["丝绸", "茶叶", "丝绸", "瓷器", "茶叶", "丝绸"]
c = Counter(goods)
print(c.most_common(1)[0][0])items = ["丝绸", "瓷器", "茶叶", "香料", "玉器"]inventory = {"丝绸": 500, "瓷器": 200, "茶叶": 50}os.path 模块的说法,正确的有?(多选)题目描述:
丝绸之路上的商人记录了一段时间内每天的商品交易种类。请你编写程序,使用 Counter 对交易数据进行统计分析。
程序要求:
1. 用户输入一个整数 n,表示有 n 天的交易记录。
2. 接下来输入 n 行,每行是一个商品名称(如"丝绸"、"茶叶"等)。
3. 使用 collections.Counter 统计每种商品出现的次数。
4. 按出现次数从高到低输出统计结果,格式为 商品:X次。
5. 输出出现次数最多的商品名称。
输入格式:
第一行:一个正整数 n。
接下来 n 行:每行一个商品名称(字符串)。
输出格式:
首先输出 ===商品交易统计===。
然后按出现次数从高到低,每行输出一个商品及其次数,格式为 商品:X次。
最后输出 最热销商品:XX。
示例输入:
示例输出:
from collections import Counter
n = int(input())
goods = []
for _ in range(n):
goods.append(input())
counter = Counter(goods)
print("===商品交易统计===")
for name, count in counter.most_common():
print(name + ":" + str(count) + "次")
if len(counter) > 0:
most_common_name = counter.most_common(1)[0][0]
print("最热销商品:" + most_common_name)
题目描述:
丝绸之路上的驿站之间有一些固定的路线相连。请你编写程序,使用字典存储驿站之间的连通关系,并检查两个驿站之间是否可以直达。
程序要求:
1. 用户首先输入两个整数 n 和 m,以空格分隔:n 表示驿站的数量,m 表示路线数量。
2. 接下来输入 m 行,每行两个字符串(以空格分隔),表示这两个驿站之间有一条直接相连的路线(双向通行)。
3. 用一个字典存储每个驿站相邻的其他驿站列表。
4. 然后输入一个整数 q,表示有 q 次查询。
5. 每次查询输入两个驿站名称(以空格分隔),判断它们是否可以直接到达(即在字典中互为相邻驿站)。如果可以,输出"直达";否则输出"需要中转"。
输入格式:
第一行:两个正整数 n 和 m,以空格分隔。
接下来 m 行:每行两个字符串,表示一条直接路线。
接下来一行:一个正整数 q,表示查询次数。
接下来 q 行:每行两个字符串,表示要查询的两个驿站。
输出格式:
对每次查询,输出"直达"或"需要中转"。
示例输入:
示例输出:
n, m = map(int, input().split())
# 建立邻接表
adj = {}
for _ in range(m):
a, b = input().split()
if a not in adj:
adj[a] = []
if b not in adj:
adj[b] = []
adj[a].append(b)
adj[b].append(a)
q = int(input())
for _ in range(q):
s1, s2 = input().split()
if s1 in adj and s2 in adj[s1]:
print("直达")
else:
print("需要中转")
题目描述:
丝绸之路上的驼队计划一次长途旅行,途中会经过 n 个补给站。驼队从起点(位置 0)出发,终点在 distance 里之外。每个补给站的位置(距离起点的里数)和该站提供的补给品价格(文/份)已知。
驼队需要购买补给品来走完全程。假设每里路需要消耗 1 份补给品。驼队可以在任意补给站购买任意数量的补给品。
请你编写程序,帮驼队计算完成全程所需的最小补给费用。
策略说明:将所有途经点(起点、各补给站、终点)按位置排序。从左到右遍历每一段路程,始终用"到目前为止遇到的最低价格"计算这段路程的费用。
输入格式:
第一行:两个正整数 n 和 distance,以空格分隔,分别表示补给站数量和总路程(里)。
接下来 n 行:每行两个整数 pos 和 price,以空格分隔,分别表示补给站的位置(里)和补给品单价(文/份)。补给站按位置升序给出,且所有位置互不相同。
输出格式:
一行,输出"最小补给费用:X文"(X为最小总费用)。
示例输入:
示例输出:
n, distance = map(int, input().split())
# 收集所有途经点:(位置, 价格)
# 起点(0)没有价格,使用第一个补给站的价格作为初始价格
points = [(0, -1)]
for _ in range(n):
pos, price = map(int, input().split())
points.append((pos, price))
points.append((distance, -1)) # 终点
# 初始最低价格设为第一个补给站的价格
min_price = points[1][1]
total_cost = 0
for i in range(1, len(points)):
# 更新最低价格
if points[i][1] != -1 and points[i][1] < min_price:
min_price = points[i][1]
# 计算当前段的距离和费用
seg_length = points[i][0] - points[i - 1][0]
total_cost += seg_length * min_price
print("最小补给费用:" + str(total_cost) + "文")
题目描述:
丝绸之路上的丝绸质检员记录了多批丝绸的检测数据。每批丝绸有一个批次号(字符串)和三个检测指标:色泽分(整数0-100)、韧性分(整数0-100)、细度分(整数0-100)。
请你编写程序完成以下功能:
1. 读取数据文件 silk_data.txt(每行格式为 批次号 色泽分 韧性分 细度分)。
2. 计算每批丝绸的综合评分:综合评分 = 色泽分×0.4 + 韧性分×0.35 + 细度分×0.25(保留两位小数)。
3. 按综合评分从高到低排序。
4. 将检测报告写入新文件 silk_report.txt,格式如下:
- 第一行为 ===丝绸质量检测报告===
- 之后每行为 批次号:综合评分 等级,其中等级划分标准为:
- 综合评分 >= 85:优等品
- 综合评分 >= 70 且 < 85:一等品
- 综合评分 >= 60 且 < 70:合格品
- 综合评分 < 60:不合格
5. 如果 silk_data.txt 文件不存在,则在控制台输出"数据文件不存在,请检查。"
6. 如果文件中存在空行,则跳过空行。
输入格式:
无键盘输入。程序读取当前目录下的 silk_data.txt 文件。silk_data.txt 示例内容:
B001 90 85 80
B002 70 75 80
B003 55 60 50
B004 88 92 90
输出格式:
生成 silk_report.txt 文件,内容格式如下:
===丝绸质量检测报告===
B004:89.70 优等品
B001:84.75 一等品
B002:72.25 一等品
B003:54.50 不合格
示例输入:
示例输出:
def calc_score(color, tough, fine):
return round(color * 0.4 + tough * 0.35 + fine * 0.25, 2)
def get_grade(score):
if score >= 85:
return "优等品"
elif score >= 70:
return "一等品"
elif score >= 60:
return "合格品"
else:
return "不合格"
try:
with open("silk_data.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
except FileNotFoundError:
print("数据文件不存在,请检查。")
else:
records = []
for line in lines:
line = line.strip()
if line == "":
continue
parts = line.split()
batch_id = parts[0]
color = int(parts[1])
tough = int(parts[2])
fine = int(parts[3])
score = calc_score(color, tough, fine)
records.append((batch_id, score))
# 按综合评分降序排序
records.sort(key=lambda x: x[1], reverse=True)
with open("silk_report.txt", "w", encoding="utf-8") as f:
f.write("===丝绸质量检测报告===\n")
for batch_id, score in records:
grade = get_grade(score)
f.write(batch_id + ":" + str(score) + " " + grade + "\n")