🏆 全国青少年信息素养大赛

算法应用主题赛 — 丝路新程(丝路文化)
难度:中等 | 时长:90 分钟 | 满分:100分
题型:5单选(10分) + 5多选(20分) + 4编程(70分)

算法应用主题赛 — 丝路新程(丝路文化)(中等)
考生:— 第 1 / 14 题
--:--
第 1 题 单选题 2 分
在丝绸之路贸易中,商人用集合记录交易的货币种类。执行以下代码后,currencies 中包含多少个元素?
currencies = {"铜钱", "银两", "金币"}
currencies.add("银两")
currencies.add("绢帛")
第 2 题 单选题 2 分
在驼队货物清单中,每件货物用一个元组记录(名称,数量)。以下代码的输出结果是什么?
goods = [("丝绸", 10), ("瓷器", 5), ("茶叶", 20)]
for name, qty in goods:
    print(name, end=" ")
第 3 题 单选题 2 分
海上丝绸之路的商人想筛选出重量超过100斤的货物。以下列表推导式的输出是什么?
weights = [80, 120, 95, 150, 60]
heavy = [w for w in weights if w > 100]
print(heavy)
第 4 题 单选题 2 分
商人需要按商品单价排序。以下 lambda 表达式的功能是什么?
goods = [("丝绸", 500), ("茶叶", 50), ("瓷器", 200)]
goods.sort(key=lambda x: x[1])
第 5 题 单选题 2 分
在海上丝路的航行记录中,需要记录每次航行的日期。以下代码的输出是什么?
from datetime import date, timedelta
departure = date(2026, 7, 8)
arrival = departure + timedelta(days=30)
print(arrival.month)
第 6 题 多选题 4 分
在丝路贸易数据报表中,商人用不同的方式格式化输出。关于Python字符串格式化的说法,正确的有?(多选)
第 7 题 多选题 4 分
商队记录了一座城市到其他城市的贸易利润,用字典存储了每个城市的利润数据。关于以下代码分析,正确的有?(多选)
profits = {"长安->敦煌": 500, "敦煌->楼兰": 300, "楼兰->大宛": 800}
第 8 题 多选题 4 分
海上丝路的航道数据存储在一个列表中,需要提取特定部分进行分析。关于列表切片,以下说法正确的有?(多选)
ports = ["广州", "泉州", "宁波", "福州", "登州", "扬州"]
第 9 题 多选题 4 分
在丝路驿站管理系统中,需要定义一个函数来处理不确定数量的驿站费用。关于 *args 和 **kwargs 的说法,正确的有?(多选)
第 10 题 多选题 4 分
驼队商人用计算机模拟天气变化对行程的影响。关于 random 模块的说法,正确的有?(多选)
第 11 题 编程操作题 0 分

题目描述:
在丝绸之路的国际贸易中,商人需要了解不同货币之间的兑换关系。请你编写程序,使用字典建立一份货币兑换表,并实现查询和兑换功能。
已知基础货币为"开元通宝"(铜钱),兑换规则如下:
- 1 银两 = 1000 铜钱
- 1 金币 = 10000 铜钱
- 1 绢帛 = 200 铜钱
程序要求:
1. 用户首先输入一个整数 q,表示有 q 次查询。
2. 每次查询输入一行,格式为 货币名称 数量(如 银两 5)。
3. 程序输出对应的铜钱数量。
4. 如果输入的货币名称不在兑换表中,输出"未知货币"。

输入格式:
第一行:一个正整数 q,表示查询次数。
接下来 q 行:每行一个货币名称和一个正整数(数量),以空格分隔。

输出格式:
对每次查询,输出"X Y = Z铜钱"(X为数量,Y为货币名称,Z为换算后的铜钱数),或输出"未知货币"。

示例输入:

3
银两 3
金币 1
贝币 10

示例输出:

3 银两 = 3000铜钱
1 金币 = 10000铜钱
未知货币
第 12 题 编程操作题 0 分

题目描述:
海上丝绸之路连接了多个重要港口。给定一个 n 个港口之间的距离矩阵(二维列表),请你编写程序实现以下功能:
1. 用户首先输入一个整数 n,表示港口数量。
2. 接下来输入 n 行,每行 n 个整数(以空格分隔),表示港口之间的距离矩阵。矩阵中 dist[i][j] 表示从港口 i+1 到港口 j+1 的距离(里)。矩阵是对称的,对角线为0。
3. 程序输出每对港口之间的距离摘要:对于每对不同的港口(i, j),如果 dist[i][j] 不为0,则按以下格式输出:
港口i+1 -> 港口j+1:XX里
4. 输出顺序:按 i 从小到大,对每个 i 按 j 从小到大。

输入格式:
第一行:一个正整数 n。
接下来 n 行:每行 n 个整数,以空格分隔。

输出格式:
每行一个距离记录,格式见题目描述。不输出距离为0的记录(包括对角线)。

示例输入:

3
0 800 1200
800 0 500
1200 500 0

示例输出:

港口1 -> 港口2:800里
港口1 -> 港口3:1200里
港口2 -> 港口3:500里
第 13 题 编程操作题 0 分

题目描述:
海上丝绸之路的商船需要将货物装入标准化的货箱。每个货箱的容量为 C(单位:斤)。给定 n 件货物的重量列表(单位:斤),商人希望用最少的货箱装完所有货物,但有一个特殊规则:每件货物必须完整装入一个箱子,不能拆分,且装入箱子时按货物给出的顺序依次装载——当一个箱子装不下当前货物时,就用一个新箱子来装。
请你编写程序,模拟这个装箱过程,计算需要多少个货箱。

输入格式:
第一行:一个正整数 C,表示每个货箱的容量(斤)。
第二行:一个正整数 n,表示货物的件数。
第三行:n 个正整数,以空格分隔,依次表示每件货物的重量(斤)。

输出格式:
第一行:使用货箱数量:X个
接下来 X 行,每行输出一个货箱中装入的货物重量列表,格式为 货箱Y:[重量列表](货箱编号从1开始)。

示例输入:

10
6
5 3 8 2 6 1

示例输出:

使用货箱数量:4个
货箱1:[5, 3]
货箱2:[8, 2]
货箱3:[6, 1]
货箱4:[6]
(解释:货箱1装5+3=8(剩余2不够装8),开货箱2装8+2=10(满),开货箱3装6+1=7(剩余3不够装6),开货箱4装6。)
第 14 题 编程操作题 0 分

题目描述:
考古学家在丝绸之路遗址中发现了若干件文物,每件文物有名称和年代(公元年份,负数表示公元前)。请你编写程序,对这些文物进行排序和筛选。
程序要求:
1. 用户首先输入一个整数 n,表示文物数量。
2. 接下来输入 n 行,每行格式为 文物名称 年代(名称和年代以空格分隔,年代为整数)。
3. 程序将所有文物数据存入一个列表中。
4. 按年代从小到大(从古到今)排序后,输出所有文物的信息。
5. 筛选并输出所有公元后的文物(年代 > 0),按名称的字母顺序(Python默认字符串排序即可)输出。

输入格式:
第一行:一个正整数 n。
接下来 n 行:每行一个文物名称和一个整数年代,以空格分隔。

输出格式:
首先输出 ===按年代排序(从古到今)===,然后每行输出 名称(年代年)。
然后输出 ===公元后文物(按名称排序)===,然后每行输出 名称(年代年)。

示例输入:

5
青铜剑 -200
丝绸残片 150
陶罐 -500
铜镜 300
竹简 50

示例输出:

===按年代排序(从古到今)===
陶罐(-500年)
青铜剑(-200年)
竹简(50年)
丝绸残片(150年)
铜镜(300年)
===公元后文物(按名称排序)===
竹简(50年)
丝绸残片(150年)
铜镜(300年)