智码云端官网|言若金叶

少儿编程教师认证-题库(专家级)

专家级初级题库 专家级高级题库 在线练习

专 家 级 初 级 题 库共10题)❀ 返回最前

试题1:运动会积分板

【题目描述】

设计一个运动会积分展示系统。根据用户输入的一班和二班的得分,系统需动态显示积分榜,使用星号(★)表示一班得分,空心的星号(☆)表示二班得分,并绘制分柱差图示。

【题目要求】

  1. 接收两个整数输入,分别代表一班得分和二班得分。
  2. 使用“★”数量表示一班得分,“☆”数量表示二班得分。
  3. 计算两班得分差,并使用竖线“|”表示分柱差(每差1分输出一个“|”)。
  4. 输出格式需与示例保持一致。

【输出示例】

一班得分:10  
二班得分:14  
最新积分榜:  
一班:★★★★★★★★★★  
二班:☆☆☆☆☆☆☆☆☆☆☆☆☆☆  
分柱差:| | | |

试题2:交通工具决策系统

【题目描述】

根据出行距离和当前天气条件,智能推荐最佳交通工具。系统需综合考虑距离分段与天气情况,输出相应的出行建议。

【题目要求】

  1. 输入一个数字表示距离(公里),以及一个字符串表示天气(晴/雨/雪)。
  2. 根据以下规则输出建议:
    • 距离 < 1公里:建议步行
    • 1 ≤ 距离 ≤ 3公里:雨天建议乘公交,否则建议骑行
    • 3 < 距离 ≤ 10公里:晴天建议新能源公交,否则建议普通公交
    • 距离 > 10公里:建议乘坐地铁
  3. 输出建议语句需完整、明确。

【输出示例】

说明:在此以距离0.2公理,天气以晴天为例,同学们可以输入自己的条件数据。

请输入目的地距离(公里):0.2  
当前天气(晴/雨/雪):晴
建议步行,低碳环保

试题3:安全密码强度检测系统

【题目描述】

设计一个密码安全评估系统,根据密码长度、是否包含字母、数字及特定特殊符号,判断密码的安全等级,并给出相应提示。

【题目要求】

  1. 输入一个字符串作为待检测密码。
  2. 根据以下规则判断安全等级:
    • 长度 < 8 或缺少字母或数字:输出“密码不安全:长度需≥8且含字母+数字”
    • 长度 ≥ 8,包含字母、数字,且包含特殊符号(!@#$%):输出“军用级安全密码!”
    • 长度 ≥ 8,包含字母和数字,但无特殊符号:输出“强密码(建议添加特殊符号)”
  3. 特殊符号仅限!@#$%五种。

【输出示例】

设置你的密码:pass123  
密码不安全:长度需≥8且含字母+数字
设置你的密码:SecureP@ss2023
军用级安全密码!

试题4:智能三角形分类器

【题目描述】

编写一个程序,根据输入的三边长度,判断其能否构成三角形,并进一步判断三角形类型(等边、等腰、直角或普通三角形)。

【题目要求】

  1. 输入三个数字(空格分隔),代表三边长度。
  2. 判断是否为三角形:任意两边之和大于第三边。
  3. 若为三角形,进一步判断:
    • 三边相等:输出“完美等边三角形”
    • 仅两边相等:输出“等腰三角形(两边相等)”
    • 满足勾股定理:输出“直角三角形(勾股定理成立)”
    • 其他:输出“普通三角形”
  4. 若非三角形,输出相应提示。

【输出示例】

输入:3 4 5  
输出:直角三角形(勾股定理成立)

输入:5 5 5
输出:完美等边三角形

输入:2 2 3
输出:等腰三角形(两边相等)

输入:1 2 4
输出:非三角形!两边之和需大于第三边

试题5:水仙花数探测器

【题目描述】

水仙花数是指一个三位数,其各位数字的立方和等于该数本身。请编写程序,找出100到999之间所有的水仙花数。

【题目要求】

  1. 遍历100至999之间的所有整数。
  2. 分离出每个数字的百位、十位、个位。
  3. 判断是否为水仙花数,若是则输出该数。
  4. 输出格式为每行一个数。

【输出示例】

153  
370  
371  
407

试题6:完美数探测器

【题目描述】

完美数是指等于其所有真因数(不包括自身)之和的正整数。请编写程序,找出10000以内的所有完美数,并输出其因数分解形式。

【题目要求】

  1. 遍历1至10000之间的所有整数。
  2. 找出每个数的所有真因数,并计算其和。
  3. 若和等于该数,则输出该完美数及其因数分解式。
  4. 输出格式参考示例。

【输出示例】

发现完美数:6(因数1+2+3)  
发现完美数:28(因数1+2+4+7+14)

试题7:打印九九乘法表

【题目描述】

编写程序,输出格式整齐的九九乘法表,要求呈现行列对齐的表格形式。

【题目要求】

  1. 使用嵌套循环实现。
  2. 每行输出当前行数对应的所有乘法算式。
  3. 算式中乘积需右对齐,保持列对齐。
  4. 输出格式需与示例一致。

核心代码

• 外层循环:for i in range(1, 10) 控制乘法表的行数,从1到9
• 内层循环:for j in range(1, i+1) 控制每行的列数,第i行就有i个算式
• 格式化输出:f”{j}×{i}={i*j:2}”
1. :2 保证乘积对齐(单位数后加空格)
2. end=” ” 使同一行的算式保持间距
• 换行:每行结束后使用print()换行

【输出示例】

1×1= 1
1×2= 2 2×2= 4
1×3= 3 2×3= 6 3×3= 9
1×4= 4 2×4= 8 3×4=12 4×4=16
1×5= 5 2×5=10 3×5=15 4×5=20 5×5=25
1×6= 6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7= 7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8= 8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9= 9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81


试题8:密码生成器

【题目描述】

设计一个随机密码生成器,从给定单词列表中随机选取三个单词,进行首字母大写、字母替换(如o→0、e→3等),并添加随机特殊符号,生成高强度密码。

【题目要求】

  1. 从预设单词列表中随机选择3个单词。
  2. 每个单词首字母大写。
  3. 将部分字母替换为数字(如o→0, e→3, a→4等)。
  4. 在密码末尾添加2个随机特殊符号(如!@#$%)。
  5. 输出生成的密码字符串。

示例单词表

words = ["apple", "banana", "river", "mountain", "sunshine"]

【输出示例】

Riv3r@Sun5hine#B4nana

试题9:智能天气分析仪

【题目描述】

给定一周的天气数据(包括每天的温度和天气类型),编写程序计算平均温度、统计最常见天气类型,并统计温度高于平均的天数。

【题目要求】

  1. 使用字典结构存储一周天气数据。
  2. 计算一周平均温度(保留一位小数)。
  3. 找出出现频率最高的天气类型。
  4. 统计温度高于平均温度的天数。
  5. 输出结果格式需与示例一致。

【数据结构】

weather_data = {
"周一": {"temp": 22, "weather": "晴"},
"周二": {"temp": 25, "weather": "多云"},
"周三": {"temp": 24, "weather": "阴天"},
"周四": {"temp": 26, "weather": "多云"},
"周五": {"temp": 20, "weather": "晴"},
"周六": {"temp": 24, "weather": "多云"},
"周日": {"temp": 23, "weather": "多云"},
}

【输出示例】

说明:请保留一位小数点。

平均温度:23.4℃  
最常见天气:多云
高于平均温度的天数:4天

试题10:星星召唤术

【题目描述】

编写一个函数,根据输入的行数,绘制由星号(*)组成的金字塔图案。

【题目要求】

  1. 定义一个函数 draw_star(rows),参数为金字塔行数。
  2. 每行星号数量递增,居中显示。
  3. 可重复调用该函数绘制不同大小的金字塔。
  4. 输出图案需与示例格式一致。

【输出示例】

调用 draw_star(5) 输出:
    *    
   ***   
  *****  
 ******* 
*********

专 家 级 高 级 题 库共30题)❀ 返回最前

试题1:单词拼写检查器

【题目描述】

请编写一个简单的单词拼写检查器,使用有序列表二分查找算法判断输入的单词是否存在于预设词典中。要求比较顺序查找与二分查找的效率差异,并输出查找过程与结果。

题目要求】

  1. 创建一个已排序的单词列表作为词典;
  2. 实现二分查找算法,并输出查找过程中的比较步骤;
  3. 实现顺序查找作为对比,输出查找步数;
  4. 输入一个单词,输出两种查找方法的结果与步数比较。

【题目说明】

# 测试数据创建一个已排序的单词列表(小型词典)
dictionary = ['apple', 'banana', 'cat', 'dog', 'elephant',
'fish', 'grape', 'house', 'ice', 'jungle']

【输出示例】

我的词典包含:['apple', 'banana', 'cat', 'dog', 'elephant', 'fish', 'grape', 'house', 'ice', 'jungle']
请输入要检查的单词:zebra
顺序查找结果:未找到,用了10步
二分查找过程:
第1步:比较 'zebra' 和 'elephant'
第2步:比较 'zebra' 和 'house'
第3步:比较 'zebra' 和 'ice'
第4步:比较 'zebra' 和 'jungle'
二分查找结果:未找到,用了4步
效率比较:顺序查找用了10步,二分查找只用了4步!

试题2:迷宫探险家(栈与回溯算法)

【题目描述】

请使用栈结构实现迷宫路径搜索算法。给定一个二维迷宫地图(0表示通路,1表示墙壁),从起点出发寻找一条通往终点的路径,并输出路径坐标。

【题目要求】

  1. 使用栈存储探索路径;
  2. 实现回溯机制,遇到死路时回退到上一个岔路口;
  3. 输出从起点到终点的完整路径坐标;
  4. 若找不到路径,输出相应提示。

题目说明】

#迷宫示例 (0=通路,1=墙壁)
maze = [
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 1, 0]
]

start = (0, 0) # 起点
end = (4, 4) # 终点

【输出示例】

路径坐标: [(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (1, 2), (0, 2), (0, 3), (0, 4), (1, 4), (2, 4), (3, 4), (4, 4)]
找到路径!

试题3:班级值日生轮换表(循环队列)

【题目描述】

请使用循环队列实现一个班级值日生自动轮换系统。系统支持添加值日生、按周轮换显示值日生,并具备队列满员提示功能。

【题目要求】

  1. 使用循环队列结构实现;
  2. 支持添加值日生(队列满时提示);
  3. 模拟每周轮换,输出当前值日生;
  4. 输出轮换顺序和队列状态。

【输出示例】

小明 已加入值日表
小红 已加入值日表
小刚 已加入值日表
小丽 已加入值日表
小强 已加入值日表
小华 无法加入,值日表已满!
当前值日生轮换顺序: 小明 → 小红 → 小刚 → 小丽 → 小强 → (循环)

第1周:
本周值日生是: 小明
当前值日生轮换顺序: 小红 → 小刚 → 小丽 → 小强 → (循环)

第2周:
本周值日生是: 小红
当前值日生轮换顺序: 小刚 → 小丽 → 小强 → (循环)

第3周:
本周值日生是: 小刚
当前值日生轮换顺序: 小丽 → 小强 → (循环)

第4周:
本周值日生是: 小丽
当前值日生轮换顺序: 小强 → (循环)

新同学加入:
小华 已加入值日表
小敏 已加入值日表
当前值日生轮换顺序: 小强 → 小华 → 小敏 → (循环)

第5周:
本周值日生是: 小强
当前值日生轮换顺序: 小华 → 小敏 → (循环)

第6周:
本周值日生是: 小华
当前值日生轮换顺序: 小敏 → (循环)

第7周:
本周值日生是: 小敏
当前值日生轮换顺序: (循环)

试题4:迷宫最短路径算法(二维数组与BFS)

题目描述】

请使用二维数组与广度优先搜索(BFS)算法,计算从迷宫起点到终点的最短路径步数与路径坐标。

【题目要求】

  1. 使用二维数组表示迷宫;
  2. 实现BFS算法计算最短路径;
  3. 输出最短路径的步数与路径坐标;
  4. 若无法到达终点,输出提示信息。

【题目说明】

# 1. 创建迷宫地图 (0=路, 1=墙)
maze = [
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 1, 0]
]

# 2. 设置起点(0,0)和终点(4,4)
start = (0, 0)
end = (4, 4)

输出示例】

走出迷宫路径坐标:
第0步: (0, 0)
第1步: (1, 0)
第2步: (2, 0)
第3步: (2, 1)
第4步: (2, 2)
第5步: (1, 2)
第6步: (0, 2)
第7步: (0, 3)
第8步: (0, 4)
第9步: (1, 4)
第10步: (2, 4)
第11步: (3, 4)
第12步: (4, 4)
走出迷宫共需要 12 步

试题5:词频统计工具(字典与Counter)

【题目描述】

请使用Python的collections.Counter工具,对给定文本进行词频统计,输出每个词语的出现次数,并按词频从高到低排序。

【题目要求】

  1. 输入一段英文文本;
  2. 使用Counter统计词频;
  3. 输出每个词语及其出现次数;
  4. 输出出现频率最高的前三个词语。

题目说明】

# 一个简单的童话故事
story = """
Once there was a little rabbit who loved carrots.
One day, the rabbit discovered a big carrot field.
The happy rabbit jumped for joy.
"""

【输出示例】

=== 童话故事词频统计器 ===

故事中词语出现的次数:
'Once': 1次
'there': 1次
'was': 1次
'a': 2次
'little': 1次
'rabbit': 3次
'who': 1次
'loved': 1次
'carrots.': 1次
'One': 1次
'day,': 1次
'the': 1次
'discovered': 1次
'big': 1次
'carrot': 1次
'field.': 1次
'The': 1次
'happy': 1次
'jumped': 1次
'for': 1次
'joy.': 1次

出现最多的词语:
第1名: 'rabbit'出现了3次
第2名: 'a'出现了2次
第3名: 'Once'出现了1次

试题6:关键词过滤系统(集合高效查找)

题目描述】

请使用集合结构实现一个聊天关键词过滤系统,快速检测输入文本中是否包含预设的敏感词。

【题目要求】

  1. 使用集合存储敏感词;
  2. 输入一段聊天文本,检测是否包含敏感词;
  3. 输出检测到的敏感词;
  4. 说明集合查找的时间复杂度优势。

【题目说明】

# 定义敏感词集合(使用集合而不是列表)
sensitive_words = {"笨蛋", "讨厌", "打架", "作弊", "骗子"}

【输出示例】

=== 智能聊天关键词过滤器 ===
系统已加载 5 个敏感词

请输入聊天内容(输入q退出):小张真是个大笨蛋
发现敏感词: 笨蛋

请输入聊天内容(输入q退出):q

试题7:迷宫出口探测算法(多维线性查找)

题目描述】

请在一个二维迷宫中查找入口与出口的位置,并输出其坐标。迷宫使用二维数组表示,其中2为入口,3为出口。

【题目要求】

  1. 遍历二维数组,查找入口(2)和出口(3);
  2. 输出入口与出口的行列坐标;
  3. 若未找到,输出相应提示。

题目说明】

# 迷宫出口探测算法 - 多维线性查找
# 5x5迷宫地图定义
• 0表示可以通行的路径
• 1表示墙壁不可通过
• 2表示迷宫的入口
• 3表示迷宫的出口

maze = [
[1, 1, 1, 1, 1],
[1, 2, 0, 0, 1],
[1, 1, 1, 0, 1],
[1, 0, 0, 0, 1],
[1, 3, 1, 1, 1]
]

【输出示例】

迷宫地图:
1 1 1 1 1
1 2 0 0 1
1 1 1 0 1
1 0 0 0 1
1 3 1 1 1

入口位置: 第2行, 第2列
出口位置: 第5行, 第2列

试题8:手机通讯录联系人查找系统(二分查找)

【题目描述】

请使用二分查找算法实现一个通讯录系统,支持按姓名精确查找和按姓氏前缀查找,并返回联系人的电话号码。

题目要求】

  1. 实现二分查找精确匹配;
  2. 实现前缀匹配查找(如输入“张”找到所有姓张的联系人);
  3. 输入姓名或前缀,输出查找结果;
  4. 处理查找不到的情况。

题目说明】

# 代码功能说明:
1.ContactSearchSystem类:
•__init__:初始化并排序联系人姓名
•binary_search_exact:精确查找联系人
•binary_search_prefix:查找所有匹配前缀的联系人
•search_contact:综合查找并输出结果
2.二分查找变种应用:
•精确查找:标准二分查找
•前缀查找:修改比较逻辑为startswith,并找到匹配范围
3.用户交互:
•支持精确姓名查找
•支持姓氏前缀查找
•友好的输入输出界面

# 模拟通讯录数据
contacts = {
"张三": "13800138000",
"李四": "13900139000",
"王五": "13700137000",
"赵六": "13600136000",
"张伟": "13500135000",
"李娜": "13400134000",
"王芳": "13300133000",
"张丽": "13200132000",
"李明": "13100131000",
"王强": "13000130000"
}

【输出示例】

=== 通讯录查找演示 ===

请输入要查找的姓名或姓氏(输入q退出):
张三
找到联系人: 张三,电话: 13800138000

请输入要查找的姓名或姓氏(输入q退出):

找到3个姓氏为'张'的联系人:
张丽: 13200132000
张三: 13800138000
张伟: 13500135000

请输入要查找的姓名或姓氏(输入q退出):

找到3个姓氏为'李'的联系人:
李明: 13100131000
李娜: 13400134000
李四: 13900139000

请输入要查找的姓名或姓氏(输入q退出):
不存在的名字
未找到姓名包含'不存在的名字'的联系人

请输入要查找的姓名或姓氏(输入q退出):
q
退出通讯录查找系统

试题9:超市水果价格排序(选择排序)

【题目描述】

请使用选择排序算法对一组水果按价格从低到高进行排序,并输出排序前后的列表。

【题目要求】

  1. 实现选择排序算法;
  2. 输入水果名称与价格;
  3. 输出排序前与排序后的水果列表;
  4. 说明选择排序的不稳定性。

【题目说明】

# 水果和它们的价格
fruits = [
{"name": "苹果", "price": 5},
{"name": "香蕉", "price": 3},
{"name": "橙子", "price": 4},
{"name": "葡萄", "price": 6},
{"name": "梨子", "price": 2}
]

输出示例】

排序前的水果顺序:
苹果: 5元
香蕉: 3元
橙子: 4元
葡萄: 6元
梨子: 2元

排序后的水果顺序:
梨子: 2元
香蕉: 3元
橙子: 4元
苹果: 5元
葡萄: 6元

试题10:水质监测数据波动分析(冒泡排序与滑窗算法)

【题目描述】

请对一段时间内的水质pH监测数据按日期排序,并使用滑动窗口算法找出连续3天pH值波动最大的时段。

题目要求】

  1. 按日期对监测数据排序;
  2. 计算相邻日期的pH差值;
  3. 使用滑动窗口找出波动最大的连续3天;
  4. 输出该时段日期、pH值及总波动量。

【题目说明】

# 模拟2026年30天的水质监测数据(日期乱序)
water_quality_data = [
{'date': '2026-05-15', 'pH': 7.2}, {'date': '2026-05-03', 'pH': 6.8},
{'date': '2026-05-20', 'pH': 7.5}, {'date': '2026-05-08', 'pH': 7.1},
{'date': '2026-05-25', 'pH': 7.8}, {'date': '2026-05-12', 'pH': 6.9},
{'date': '2026-05-18', 'pH': 7.4}, {'date': '2026-05-05', 'pH': 6.7},
{'date': '2026-05-22', 'pH': 7.6}, {'date': '2026-05-10', 'pH': 7.0},
{'date': '2026-05-28', 'pH': 7.9}, {'date': '2026-05-01', 'pH': 6.5},
{'date': '2026-05-16', 'pH': 7.3}, {'date': '2026-05-07', 'pH': 6.9},
{'date': '2026-05-23', 'pH': 7.7}, {'date': '2026-05-13', 'pH': 7.0},
{'date': '2026-05-19', 'pH': 7.5}, {'date': '2026-05-06', 'pH': 6.8},
{'date': '2026-05-24', 'pH': 7.7}, {'date': '2026-05-09', 'pH': 7.0},
{'date': '2026-05-27', 'pH': 7.9}, {'date': '2026-05-02', 'pH': 6.6},
{'date': '2026-05-17', 'pH': 7.4}, {'date': '2026-05-11', 'pH': 7.0},
{'date': '2026-05-21', 'pH': 7.6}, {'date': '2026-05-14', 'pH': 7.1},
{'date': '2026-05-26', 'pH': 7.8}, {'date': '2026-05-04', 'pH': 6.7},
{'date': '2026-05-29', 'pH': 8.0}, {'date': '2026-05-30', 'pH': 7.2}
]

输出示例】

2026年原始监测数据(前5条):
日期: 2026-05-15, pH值: 7.2
日期: 2026-05-03, pH值: 6.8
日期: 2026-05-20, pH值: 7.5
日期: 2026-05-08, pH值: 7.1
日期: 2026-05-25, pH值: 7.8

2026年排序后监测数据(前5条):
日期: 2026-05-01, pH值: 6.5
日期: 2026-05-02, pH值: 6.6
日期: 2026-05-03, pH值: 6.8
日期: 2026-05-04, pH值: 6.7
日期: 2026-05-05, pH值: 6.7

2026年pH值变化最大的3天时段:
日期: 2026-05-28, pH值: 7.9
日期: 2026-05-29, pH值: 8.0
日期: 2026-05-30, pH值: 7.2
三日总变化量: 0.90

试题11:音乐播放列表智能推荐(链表与插入排序)

题目描述】

请使用链表结构实现一个音乐播放列表系统,支持按歌曲热度动态排序,新歌曲按热度插入到合适位置。

题目要求】

  1. 使用链表存储歌曲(名称、热度);
  2. 新歌曲按热度插入到已排序链表中;
  3. 输出每次插入后的播放列表;
  4. 说明链表在频繁插入场景下的优势。

题目说明】

# 初始歌曲
songs = [
Song("小星星", 85),
Song("两只老虎", 90),
Song("生日快乐", 75)
]

# 模拟新增歌曲
new_songs = [
Song("我的朋友在哪里", 80),
Song("小兔子乖乖", 95),
Song("上学歌", 70)
]

输出示例】

当前推荐播放列表:
1. 两只老虎 (热度:90)
2. 小星星 (热度:85)
3. 生日快乐 (热度:75)

=== 新增3首歌曲 ===

新加入歌曲: 我的朋友在哪里 (热度:80)

当前推荐播放列表:
1. 两只老虎 (热度:90)
2. 小星星 (热度:85)
3. 我的朋友在哪里 (热度:80)
4. 生日快乐 (热度:75)

新加入歌曲: 小兔子乖乖 (热度:95)

当前推荐播放列表:
1. 小兔子乖乖 (热度:95)
2. 两只老虎 (热度:90)
3. 小星星 (热度:85)
4. 我的朋友在哪里 (热度:80)
5. 生日快乐 (热度:75)

新加入歌曲: 上学歌 (热度:70)

当前推荐播放列表:
1. 小兔子乖乖 (热度:95)
2. 两只老虎 (热度:90)
3. 小星星 (热度:85)
4. 我的朋友在哪里 (热度:80)
5. 生日快乐 (热度:75)
6. 上学歌 (热度:70)

试题12:运动会成绩排名(快速排序)

题目描述】

请使用快速排序算法对运动会选手成绩按时间从快到慢进行排序,并输出排名结果。

题目要求】

  1. 实现快速排序算法;
  2. 输入选手姓名与成绩(秒);
  3. 输出按成绩升序排列的排名列表;
  4. 说明快速排序的分治思想。

题目说明】

# 测试数据:运动员列表,包含姓名和成绩(秒)
athletes = [
{'name': '张小明', 'score': 12.5},
{'name': '王小红', 'score': 11.8},
{'name': '李小刚', 'score': 13.2},
{'name': '盛小丽', 'score': 12.1},
{'name': '朱小强', 'score': 11.9},
{'name': '百小美', 'score': 12.7},
{'name': '盖小华', 'score': 12.3}
]

输出示例】

原始成绩列表:
张小明: 12.5秒
王小红: 11.8秒
李小刚: 13.2秒
盛小丽: 12.1秒
朱小强: 11.9秒
百小美: 12.7秒
盖小华: 12.3秒

排名结果(从快到慢):
第1名: 王小红 11.8秒
第2名: 朱小强 11.9秒
第3名: 盛小丽 12.1秒
第4名: 盖小华 12.3秒
第5名: 张小明 12.5秒
第6名: 百小美 12.7秒
第7名: 李小刚 13.2秒

试题13:校园导航最短路径(Dijkstra算法)

题目描述】

请使用Dijkstra算法计算校园内从起点到目的地的最短路径,输出路径与总耗时。

题目要求】

  1. 使用邻接表表示校园地图;
  2. 实现Dijkstra算法;
  3. 输入起点与终点,输出最短路径与时间;
  4. 说明优先队列在算法中的作用。

题目说明】

#测试数据:校园地图的加权图表示
campus_map = {
'宿舍': {'教学楼': 5, '食堂': 3},
'教学楼': {'宿舍': 5, '图书馆': 7, '操场': 2},
'食堂': {'宿舍': 3, '图书馆': 2, '体育馆': 6},
'图书馆': {'教学楼': 7, '食堂': 2, '体育馆': 1},
'操场': {'教学楼': 2, '体育馆': 3},
'体育馆': {'食堂': 6, '图书馆': 1, '操场': 3}
}

输出示例】

最短路径: 宿舍 → 食堂 → 图书馆 → 体育馆
总步行时间: 6分钟

试题14:消防员救援任务(BFS最短步数)

题目描述】

请使用BFS算法计算消防员从起点到火灾位置的最短步数,并输出路径。

题目要求】

  1. 使用二维地图表示建筑布局;
  2. 实现BFS算法计算最短路径;
  3. 输出最短步数与路径坐标;
  4. 说明BFS在无权图中的优势。

题目说明】

# 图形表示符
• "." 表示可以通行的道路
• "#" 表示建筑物(无法穿过)
• "F" 是消防站(起点)
• "E" 是着火点(终点)

# 测试地图
city_map = [
['F', '.', '#', '.', '.'],
['.', '.', '.', '.', '#'],
['.', '#', '.', '#', '.'],
['.', '.', '.', '.', 'E']
]

#定义四个移动方向:上、下、左、右
directions = [(-1,0,'U'), (1,0,'D'), (0,-1,'L'), (0,1,'R')]

输出示例】

城市街区地图:
F . # . .
. . . . #
. # . # .
. . . . E

最短救援步数: 7
移动路径: DDDRRRR

试题15:数独游戏求解器(DFS回溯算法)

题目描述】

请使用深度优先搜索(DFS)与回溯算法实现一个数独游戏求解器,能够解决给定的9×9数独难题。

题目要求】

  1. 实现DFS递归算法填充数独格子;
  2. 应用剪枝优化,提前排除无效数字;
  3. 输入一个未完成的数独盘面(空格用0表示);
  4. 输出求解完成的数独盘面。

题目说明】

# 示例数独题目 (0表示空格)
sudoku_board = [
[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 7, 9]
]

输出示例】

初始数独:
5 3 . | . 7 . | . . .
6 . . | 1 9 5 | . . .
. 9 8 | . . . | . 6 .
- - - - - - - - - - -
8 . . | . 6 . | . . 3
4 . . | 8 . 3 | . . 1
7 . . | . 2 . | . . 6
- - - - - - - - - - -
. 6 . | . . . | 2 8 .
. . . | 4 1 9 | . . 5
. . . | . 8 . | . 7 9

求解中...

解出的数独:
5 3 4 | 6 7 8 | 9 1 2
6 7 2 | 1 9 5 | 3 4 8
1 9 8 | 3 4 2 | 5 6 7
- - - - - - - - - - -
8 5 9 | 7 6 1 | 4 2 3
4 2 6 | 8 5 3 | 7 9 1
7 1 3 | 9 2 4 | 8 5 6
- - - - - - - - - - -
9 6 1 | 5 3 7 | 2 8 4
2 8 7 | 4 1 9 | 6 3 5
3 4 5 | 2 8 6 | 1 7 9

试题16:电力网络冗余线路检测(最小生成树)

题目描述】

在一个电力网络图中,部分线路可能是冗余的。请使用最小生成树算法(Kruskal或Prim)找出能够连接所有节点的最小必要线路集合,并识别冗余线路。

电力网络冗余线路检测:某城市有6个发电站(A-F)和以下输电线路及维护成本:
• A-B: 4万元/年
• A-C: 3万元/年
• B-C: 5万元/年
• B-D: 7万元/年
• C-D: 6万元/年
• C-E: 8万元/年
• D-F: 9万元/年
• E-F: 5万元/年
由于预算削减,电力公司需要:
1. 确保所有发电站保持连通(可直接或间接输电)
2. 找出可以关闭的冗余线路以节省最多维护费用
3. 处理可能存在的天然不连通区域(生成最小生成森林)

题目要求】

  1. 使用邻接表或邻接矩阵表示电力网络图;
  2. 实现最小生成树算法;
  3. 输出构成最小生成树的线路集合;
  4. 列出被识别为冗余的线路。

题目说明】

# 发电站映射为数字: A:0, B:1, C:2, D:3, E:4, F:5
edges = [
(0, 1, 4), # A-B
(0, 2, 3), # A-C
(1, 2, 5), # B-C
(1, 3, 7), # B-D
(2, 3, 6), # C-D
(2, 4, 8), # C-E
(3, 5, 9), # D-F
(4, 5, 5) # E-F
]

输出示例】

必需保留的输电线路:
A-C: 3万元/年
A-B: 4万元/年
E-F: 5万元/年
C-D: 6万元/年
C-E: 8万元/年

可关闭的冗余线路:
B-C: 可节约 5万元/年
B-D: 可节约 7万元/年
D-F: 可节约 9万元/年

最优年维护成本: 26万元
每年可节约成本: 21万元

试题17:知识问答系统索引(字典树Trie)

题目描述】

请使用字典树(Trie)结构构建一个知识问答系统的关键词索引,支持关键词的快速插入、检索和前缀匹配。

题目要求】

  1. 实现字典树数据结构;
  2. 支持插入关键词及其关联信息(如答案ID);
  3. 实现前缀匹配搜索,返回所有匹配关键词;
  4. 输入查询前缀,输出匹配的关键词列表。

题目说明】

# 创建知识库并插入一些问题
kb = KnowledgeBase()
kb.insert("什么是光合作用", "植物利用阳光制造食物的过程")
kb.insert("什么是计算机", "能自动执行计算的电子设备")
kb.insert("计算机病毒是什么", "能破坏计算机程序的恶意软件")
kb.insert("太阳系有多少行星", "太阳系有8大行星")
kb.insert("怎么学习编程", "从基础开始,多实践")

输出示例】

=== 知识库结构 ===
问题: '什么是光合作用' -> 答案: '植物利用阳光制造食物的过程'
问题: '什么是计算机' -> 答案: '能自动执行计算的电子设备'
问题: '计算机病毒是什么' -> 答案: '能破坏计算机程序的恶意软件'
问题: '太阳系有多少行星' -> 答案: '太阳系有8大行星'
问题: '怎么学习编程' -> 答案: '从基础开始,多实践'

=== 精确查找测试 ===
问题: '什么是计算机'
答案: 能自动执行计算的电子设备

=== 前缀匹配测试 ===
输入前缀: '计算机'
匹配问题: '计算机病毒是什么' -> 答案: '能破坏计算机程序的恶意软件'
匹配问题: '什么是计算机' -> 答案: '能自动执行计算的电子设备'

试题18:城市供水管网与最大流问题(图的最大流)

题目描述】

模拟城市供水管网系统,请使用最大流算法(如Edmonds-Karp)计算从水源点到居民区的最大供水量。

【题目要求】

  1. 使用有向图表示管网,边权表示管道容量;
  2. 实现最大流算法;
  3. 输入水源点、汇点及管网结构;
  4. 输出最大流量值及关键路径。

题目说明】

# 创建一个供水管网
water_system = Graph()

# 添加管道连接和容量
water_system.add_edge('水源', 'A小区', 3)
water_system.add_edge('水源', 'B小区', 2)
water_system.add_edge('A小区', 'C小区', 2)
water_system.add_edge('B小区', 'C小区', 1)
water_system.add_edge('B小区', 'D小区', 3)
water_system.add_edge('C小区', '目标小区', 2)
water_system.add_edge('D小区', '目标小区', 2)

输出示例】

从水源到目标小区的最大供水量是: 4 单位

试题19:用游乐园快速通行证问题学习贪心算法

题目描述】

限时内玩最多游乐园项目:小明在游乐园有3小时的游玩时间(180分钟),想尽可能多地体验游乐项目。每个项目有不同的持续时间和娱乐价值(如下面的列表),如何选择项目组合,才能在3小时内获得最佳体验?

项目名称持续时间(分钟)娱乐价值
过山车6090
旋转木马2030
鬼屋4580
碰碰车3050
摩天轮4065

题目要求】

  1. 1.多维条件的贪心决策
  2. 2.价值/时间比的计算与应用
  3. 3.动态优先级调整策略
  4. 4.贪心算法的局限性分析

【题目说明】

# 游乐园项目数据
attractions = [
{'name': '过山车', 'time': 60, 'value': 90},
{'name': '旋转木马', 'time': 20, 'value': 30},
{'name': '鬼屋', 'time': 45, 'value': 80},
{'name': '碰碰车', 'time': 30, 'value': 50},
{'name': '摩天轮', 'time': 40, 'value': 65}
]

输出示例】

最佳项目选择方案: ['鬼屋', '碰碰车', '摩天轮', '过山车']
总共游玩项目数: 4
剩余时间: 5 分钟
选择的项目及详情:
鬼屋: 时长45分钟, 价值80, 价值比1.78
碰碰车: 时长30分钟, 价值50, 价值比1.67
摩天轮: 时长40分钟, 价值65, 价值比1.62
过山车: 时长60分钟, 价值90, 价值比1.50

试题20:野餐食物选择 – 多维背包问题

题目描述】

野餐食物选择问题:小明要去野餐,他的背包最多能装5公斤食物。他需要选择一些食物,既要考虑食物的美味程度(1-5分),又要考虑食物的健康程度(1-5分)。如何选择食物才能在不超过背包重量的情况下,使食物的总美味度和总健康度都尽可能高?

题目要求】

1. 多维约束的0/1背包问题
2.双价值维度的处理方法
3.记忆化搜索技术
4.递归与回溯思想
5.简单优化技巧

题目说明】

假设有以下野餐食物选择:

食物重量(kg)美味度健康度
苹果135
薯片251
三明治344
果汁123
巧克力152

背包容量:5公斤

输出示例】

选择的食物: [‘苹果’, ‘薯片’, ‘果汁’, ‘巧克力’]
总美味度: 15, 总健康度: 11
总重量: 5kg


试题21:网格最小路径规划

【题目描述】

小明在一个 n×m 的网格中,从左上角出发,每次只能向右或向下移动,要到达右下角。每个格子有一个数字代表通过该格子的代价。请找出路径上数字总和最小的路径,并输出最小代价。

【题目要求】

  1. 输入一个 n×m 的网格矩阵。
  2. 输出最小代价及具体路径(如:1→3→1→1→1)。
  3. 使用动态规划实现。

【题目说明】

# 测试网格
[1, 3, 1]
[1, 5, 1]
[4, 2, 1]

输出示例】

最小路径:1→3→1→1→1
最小代价:1+3+1+1+1 = 7

试题22:篮球赛程价值最大化 – 带权区间调度

题目描述】

市里举办篮球锦标赛,每场比赛有开始时间、结束时间和价值分数。要求选择若干场时间不冲突的比赛,使得总价值最大。

题目要求】

  1. 输入比赛列表(开始时间、结束时间、价值)。
  2. 输出最大总价值。
  3. 使用动态规划实现,可结合二分查找优化。

题目说明】

#测试用例
games1 = [[1, 3, 5], [2, 4, 3], [3, 5, 8], [4, 6, 4]]
games2 = [[1, 4, 2], [2, 5, 10], [3, 6, 3], [5, 7, 8]]

输出示例】

最大总价值:13

试题23:零食分享配对 – 最长公共子序列

题目描述】

小明和小红各自有一袋按顺序排列的零食序列。请找出两个序列的最长公共子序列(LCS),即在不改变顺序的情况下,两人能拿出的相同零食的最长排列。

题目要求】

  1. 输入两个字符串,分别代表两人的零食序列。
  2. 输出最长公共子序列的长度及具体序列。
  3. 使用动态规划实现。

题目说明】

# 测试数据
小明的零食:"ABCBDAB"
小红的零食:"BDCAB"

输出示例】

最长公共子序列长度:4
最长公共子序列:BCAB

试题24:迷宫游戏地图稀疏矩阵应用

题目描述】

用迷宫游戏理解稀疏矩阵​:想象你在设计一个迷宫游戏,地图是一个100×100的巨大网格,但只有不到10%的格子是墙壁(障碍物),其他都是可通行的空地。稀疏矩阵就像一张”智能地图”,只记录墙壁的位置,而不是傻傻地记住每个格子有没有墙,大大节省了内存空间。

题目要求】

1.稀疏矩阵的概念和应用场景
2.稀疏矩阵与密集矩阵的对比
3.使用defaultdict实现稀疏矩阵
4.用纸张绘制迷宫对比两种存储方式,实际测量内存使用差异

题目说明】

地图打印:
•只打印玩家周围10×10区域(简化显示)
•"P"表示玩家,"#"表示墙壁,"."表示空地

输出示例】

迷宫地图 (仅显示10×10区域,共100×100)
.#########
....#.....
..........
......#...
..........
.#...P....
..........
.........#
..........
.........#

密集矩阵需要存储 10000 个格子
稀疏矩阵实际存储 853 个格子
节省了 91.47% 的空间

(50,30)是墙壁吗? False

试题25:校园寻宝游戏 – 二维分治算法

题目描述】

校园被划分成 N×N 网格,某些格子藏有宝藏。请设计一个高效算法,找出所有宝藏的位置。

题目要求】

  1. 输入一个 N×N 的网格(0表示无宝藏,1表示有宝藏)。
  2. 输出所有宝藏的坐标。
  3. 使用二维分治算法实现,支持剪枝优化。

题目说明】

# 校园地图示例 (0表示无宝藏,1表示有宝藏)
campus = [
[0, 0, 0, 1],
[0, 1, 0, 0],
[0, 0, 1, 0],
[1, 0, 0, 0]
]

输出示例】

=== 校园寻宝游戏开始 ===
校园地图:
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 0]
[1, 0, 0, 0]

正在搜索宝藏...

=== 寻宝结果 ===
找到 4 处宝藏:
第1行, 第4列
第2行, 第2列
第3行, 第3列
第4行, 第1列

试题26:交通灯配时优化 – 滑动窗口

题目描述】

十字路口有四组交通灯,每分钟更新一次各方向车流量。请根据过去5分钟的车流量动态调整绿灯时间分配比例。

题目要求】

  1. 输入四个方向过去5分钟的车流量列表。
  2. 输出各方向绿灯时间分配比例(百分比)。
  3. 使用滑动窗口算法实现。

题目说明】

车流量数据每分钟更新一次:
• 东:[10, 15, 20, 15, 10]
• 南:[5, 10, 15, 10, 5]
• 西:[8, 12, 18, 12, 8]
• 北:[3, 7, 10, 7, 3]

输出示例】

绿灯时间分配建议:
东方向:34%
南方向:22%
西方向:29%
北方向:15%

试题27:游戏装备合成优先级系统 – 堆排序

题目描述】

游戏中有多个装备需要合成,每个装备有稀有度、合成时间、材料价值三个属性。请根据优先级(稀有度 > 时间 > 价值)智能安排合成顺序。

题目要求】

  1. 输入装备列表(名称、稀有度、时间、价值)。
  2. 输出按优先级排序的合成队列。
  3. 使用堆排序(优先队列)实现。

题目说明】

# 测试数据
王者之剑 (传说, 120分钟, 材料价值5000金币)
火焰法杖 (史诗, 60分钟, 材料价值3000金币)
黄金盾牌 (史诗, 90分钟, 材料价值4500金币)
铁质头盔 (普通, 30分钟, 材料价值800金币)
魔法戒指 (稀有, 45分钟, 材料价值2000金币)

输出示例】

=== 最终合成队列(按优先级排序)===
排名 | 装备名称 | 稀有度 | 时间(分) | 价值(金)
-------------------------------------------------
1 | 王者之剑 | 传说 | 120 | 5000
2 | 火焰法杖 | 史诗 | 60 | 3000
3 | 黄金盾牌 | 史诗 | 90 | 4500
4 | 魔法戒指 | 稀有 | 45 | 2000
5 | 铁质头盔 | 普通 | 30 | 800

试题28:零花钱记账本 – 前缀和与差分

题目描述】

小明记录每周每天的零花钱使用情况,需要快速查询任意区间的花费总和,并支持动态更新某天的花费。

题目要求】

  1. 输入一周的每日花费列表。
  2. 支持查询任意区间花费总和。
  3. 支持更新某一天的花费。
  4. 使用前缀和与差分技术实现。

题目说明】

前缀和是什么?就像搭积木一样,我们把每天的消费累加起来:
每日消费:[5, 3, 8, 6, 2, 9, 4] (周一~周日)
前缀和: [5, 8, 16, 22, 24, 33, 37]

输出示例】

=== 智能零花钱记账本 ===

1. 记录本周消费:

零花钱消费报告:
周一: 5元 | 周二: 3元 | 周三: 8元 | 周四: 6元 | 周五: 2元 | 周六: 9元 | 周日: 4元 |

总计花费: 37元
========================================

2. 查询周三到周五的花费:
周三到周五共花费: 16 元

3. 周四又花了5元:

零花钱消费报告:
周一: 5元 | 周二: 3元 | 周三: 8元 | 周四: 11元 | 周五: 2元 | 周六: 9元 | 周日: 4元 |

总计花费: 42元
========================================

试题29:汉诺塔问题 – 递归算法

题目描述】

有三根柱子(A、B、C),A柱上有 n 个大小不同的盘子。要求将所有盘子移动到 C 柱,每次只能移动一个盘子,且大盘子不能放在小盘子上面。请输出移动步骤。

题目要求】

  1. 输入盘子数量 n。
  2. 输出每一步的移动描述。
  3. 使用递归算法实现。

输出示例】

=== 汉诺塔问题递归解法 ===

移动 3 个盘子的解决方案:
========================================
步骤1: 将盘子1从 A 移动到 C
步骤2: 将盘子2从 A 移动到 B
步骤3: 将盘子1从 C 移动到 B
步骤4: 将盘子3从 A 移动到 C
步骤5: 将盘子1从 B 移动到 A
步骤6: 将盘子2从 B 移动到 C
步骤7: 将盘子1从 A 移动到 C

3个盘子需要 7 步

不同盘子数量需要的步数:
========================================
1个盘子: 1步
2个盘子: 3步
3个盘子: 7步
4个盘子: 15步
5个盘子: 31步

试题30:N皇后问题 – 回溯算法

题目描述】

在 N×N 的棋盘上放置 N 个皇后,使得它们彼此不在同一行、同一列或同一斜线上。请找出所有可能的摆放方案。

题目要求】

  1. 输入棋盘大小 N。
  2. 输出所有摆放方案(可用棋盘矩阵或皇后位置列表表示)。
  3. 使用回溯算法实现。

输出示例】

8皇后问题总共有 92 种解决方案!