
专家级初级题库 专家级高级题库 在线练习
❀ 专 家 级 初 级 题 库(共10题)❀ 返回最前
试题1:运动会积分板
【题目描述】
设计一个运动会积分展示系统。根据用户输入的一班和二班的得分,系统需动态显示积分榜,使用星号(★)表示一班得分,空心的星号(☆)表示二班得分,并绘制分柱差图示。
【题目要求】
- 接收两个整数输入,分别代表一班得分和二班得分。
- 使用“★”数量表示一班得分,“☆”数量表示二班得分。
- 计算两班得分差,并使用竖线“|”表示分柱差(每差1分输出一个“|”)。
- 输出格式需与示例保持一致。
【输出示例】
一班得分:10 二班得分:14 最新积分榜: 一班:★★★★★★★★★★ 二班:☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 分柱差:| | | |
试题2:交通工具决策系统
【题目描述】
根据出行距离和当前天气条件,智能推荐最佳交通工具。系统需综合考虑距离分段与天气情况,输出相应的出行建议。
【题目要求】
- 输入一个数字表示距离(公里),以及一个字符串表示天气(晴/雨/雪)。
- 根据以下规则输出建议:
- 距离 < 1公里:建议步行
- 1 ≤ 距离 ≤ 3公里:雨天建议乘公交,否则建议骑行
- 3 < 距离 ≤ 10公里:晴天建议新能源公交,否则建议普通公交
- 距离 > 10公里:建议乘坐地铁
- 输出建议语句需完整、明确。
【输出示例】
说明:在此以距离0.2公理,天气以晴天为例,同学们可以输入自己的条件数据。
请输入目的地距离(公里):0.2
当前天气(晴/雨/雪):晴
建议步行,低碳环保
试题3:安全密码强度检测系统
【题目描述】
设计一个密码安全评估系统,根据密码长度、是否包含字母、数字及特定特殊符号,判断密码的安全等级,并给出相应提示。
【题目要求】
- 输入一个字符串作为待检测密码。
- 根据以下规则判断安全等级:
- 长度 < 8 或缺少字母或数字:输出“密码不安全:长度需≥8且含字母+数字”
- 长度 ≥ 8,包含字母、数字,且包含特殊符号(!@#$%):输出“军用级安全密码!”
- 长度 ≥ 8,包含字母和数字,但无特殊符号:输出“强密码(建议添加特殊符号)”
- 特殊符号仅限!@#$%五种。
【输出示例】
设置你的密码:pass123
密码不安全:长度需≥8且含字母+数字
设置你的密码:SecureP@ss2023
军用级安全密码!
试题4:智能三角形分类器
【题目描述】
编写一个程序,根据输入的三边长度,判断其能否构成三角形,并进一步判断三角形类型(等边、等腰、直角或普通三角形)。
【题目要求】
- 输入三个数字(空格分隔),代表三边长度。
- 判断是否为三角形:任意两边之和大于第三边。
- 若为三角形,进一步判断:
- 三边相等:输出“完美等边三角形”
- 仅两边相等:输出“等腰三角形(两边相等)”
- 满足勾股定理:输出“直角三角形(勾股定理成立)”
- 其他:输出“普通三角形”
- 若非三角形,输出相应提示。
【输出示例】
输入:3 4 5
输出:直角三角形(勾股定理成立)
输入:5 5 5
输出:完美等边三角形
输入:2 2 3
输出:等腰三角形(两边相等)
输入:1 2 4
输出:非三角形!两边之和需大于第三边
试题5:水仙花数探测器
【题目描述】
水仙花数是指一个三位数,其各位数字的立方和等于该数本身。请编写程序,找出100到999之间所有的水仙花数。
【题目要求】
- 遍历100至999之间的所有整数。
- 分离出每个数字的百位、十位、个位。
- 判断是否为水仙花数,若是则输出该数。
- 输出格式为每行一个数。
【输出示例】
153 370 371 407
试题6:完美数探测器
【题目描述】
完美数是指等于其所有真因数(不包括自身)之和的正整数。请编写程序,找出10000以内的所有完美数,并输出其因数分解形式。
【题目要求】
- 遍历1至10000之间的所有整数。
- 找出每个数的所有真因数,并计算其和。
- 若和等于该数,则输出该完美数及其因数分解式。
- 输出格式参考示例。
【输出示例】
发现完美数:6(因数1+2+3) 发现完美数:28(因数1+2+4+7+14)
试题7:打印九九乘法表
【题目描述】
编写程序,输出格式整齐的九九乘法表,要求呈现行列对齐的表格形式。
【题目要求】
- 使用嵌套循环实现。
- 每行输出当前行数对应的所有乘法算式。
- 算式中乘积需右对齐,保持列对齐。
- 输出格式需与示例一致。
【核心代码】
• 外层循环: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等),并添加随机特殊符号,生成高强度密码。
【题目要求】
- 从预设单词列表中随机选择3个单词。
- 每个单词首字母大写。
- 将部分字母替换为数字(如o→0, e→3, a→4等)。
- 在密码末尾添加2个随机特殊符号(如!@#$%)。
- 输出生成的密码字符串。
【示例单词表】
words = ["apple", "banana", "river", "mountain", "sunshine"]
【输出示例】
Riv3r@Sun5hine#B4nana
试题9:智能天气分析仪
【题目描述】
给定一周的天气数据(包括每天的温度和天气类型),编写程序计算平均温度、统计最常见天气类型,并统计温度高于平均的天数。
【题目要求】
- 使用字典结构存储一周天气数据。
- 计算一周平均温度(保留一位小数)。
- 找出出现频率最高的天气类型。
- 统计温度高于平均温度的天数。
- 输出结果格式需与示例一致。
【数据结构】
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:星星召唤术
【题目描述】
编写一个函数,根据输入的行数,绘制由星号(*)组成的金字塔图案。
【题目要求】
- 定义一个函数
draw_star(rows),参数为金字塔行数。 - 每行星号数量递增,居中显示。
- 可重复调用该函数绘制不同大小的金字塔。
- 输出图案需与示例格式一致。
【输出示例】
调用 draw_star(5) 输出:
*
***
*****
*******
*********
❀ 专 家 级 高 级 题 库(共30题)❀ 返回最前
试题1:单词拼写检查器
【题目描述】
请编写一个简单的单词拼写检查器,使用有序列表与二分查找算法判断输入的单词是否存在于预设词典中。要求比较顺序查找与二分查找的效率差异,并输出查找过程与结果。
【题目要求】
- 创建一个已排序的单词列表作为词典;
- 实现二分查找算法,并输出查找过程中的比较步骤;
- 实现顺序查找作为对比,输出查找步数;
- 输入一个单词,输出两种查找方法的结果与步数比较。
【题目说明】
# 测试数据创建一个已排序的单词列表(小型词典)
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表示墙壁),从起点出发寻找一条通往终点的路径,并输出路径坐标。
【题目要求】
- 使用栈存储探索路径;
- 实现回溯机制,遇到死路时回退到上一个岔路口;
- 输出从起点到终点的完整路径坐标;
- 若找不到路径,输出相应提示。
【题目说明】
#迷宫示例 (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周:
本周值日生是: 小丽
当前值日生轮换顺序: 小强 → (循环)
新同学加入:
小华 已加入值日表
小敏 已加入值日表
当前值日生轮换顺序: 小强 → 小华 → 小敏 → (循环)
第5周:
本周值日生是: 小强
当前值日生轮换顺序: 小华 → 小敏 → (循环)
第6周:
本周值日生是: 小华
当前值日生轮换顺序: 小敏 → (循环)
第7周:
本周值日生是: 小敏
当前值日生轮换顺序: (循环)
试题4:迷宫最短路径算法(二维数组与BFS)
【题目描述】
请使用二维数组与广度优先搜索(BFS)算法,计算从迷宫起点到终点的最短路径步数与路径坐标。
【题目要求】
- 使用二维数组表示迷宫;
- 实现BFS算法计算最短路径;
- 输出最短路径的步数与路径坐标;
- 若无法到达终点,输出提示信息。
【题目说明】
# 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工具,对给定文本进行词频统计,输出每个词语的出现次数,并按词频从高到低排序。
【题目要求】
- 输入一段英文文本;
- 使用
Counter统计词频; - 输出每个词语及其出现次数;
- 输出出现频率最高的前三个词语。
【题目说明】
# 一个简单的童话故事
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:关键词过滤系统(集合高效查找)
【题目描述】
请使用集合结构实现一个聊天关键词过滤系统,快速检测输入文本中是否包含预设的敏感词。
【题目要求】
- 使用集合存储敏感词;
- 输入一段聊天文本,检测是否包含敏感词;
- 输出检测到的敏感词;
- 说明集合查找的时间复杂度优势。
【题目说明】
# 定义敏感词集合(使用集合而不是列表)
sensitive_words = {"笨蛋", "讨厌", "打架", "作弊", "骗子"}
【输出示例】
=== 智能聊天关键词过滤器 ===
系统已加载 5 个敏感词
请输入聊天内容(输入q退出):小张真是个大笨蛋
发现敏感词: 笨蛋
请输入聊天内容(输入q退出):q
试题7:迷宫出口探测算法(多维线性查找)
【题目描述】
请在一个二维迷宫中查找入口与出口的位置,并输出其坐标。迷宫使用二维数组表示,其中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.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:超市水果价格排序(选择排序)
【题目描述】
请使用选择排序算法对一组水果按价格从低到高进行排序,并输出排序前后的列表。
【题目要求】
- 实现选择排序算法;
- 输入水果名称与价格;
- 输出排序前与排序后的水果列表;
- 说明选择排序的不稳定性。
【题目说明】
# 水果和它们的价格
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值波动最大的时段。
【题目要求】
- 按日期对监测数据排序;
- 计算相邻日期的pH差值;
- 使用滑动窗口找出波动最大的连续3天;
- 输出该时段日期、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:音乐播放列表智能推荐(链表与插入排序)
【题目描述】
请使用链表结构实现一个音乐播放列表系统,支持按歌曲热度动态排序,新歌曲按热度插入到合适位置。
【题目要求】
- 使用链表存储歌曲(名称、热度);
- 新歌曲按热度插入到已排序链表中;
- 输出每次插入后的播放列表;
- 说明链表在频繁插入场景下的优势。
【题目说明】
# 初始歌曲
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:运动会成绩排名(快速排序)
【题目描述】
请使用快速排序算法对运动会选手成绩按时间从快到慢进行排序,并输出排名结果。
【题目要求】
- 实现快速排序算法;
- 输入选手姓名与成绩(秒);
- 输出按成绩升序排列的排名列表;
- 说明快速排序的分治思想。
【题目说明】
# 测试数据:运动员列表,包含姓名和成绩(秒)
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算法计算校园内从起点到目的地的最短路径,输出路径与总耗时。
【题目要求】
- 使用邻接表表示校园地图;
- 实现Dijkstra算法;
- 输入起点与终点,输出最短路径与时间;
- 说明优先队列在算法中的作用。
【题目说明】
#测试数据:校园地图的加权图表示
campus_map = {
'宿舍': {'教学楼': 5, '食堂': 3},
'教学楼': {'宿舍': 5, '图书馆': 7, '操场': 2},
'食堂': {'宿舍': 3, '图书馆': 2, '体育馆': 6},
'图书馆': {'教学楼': 7, '食堂': 2, '体育馆': 1},
'操场': {'教学楼': 2, '体育馆': 3},
'体育馆': {'食堂': 6, '图书馆': 1, '操场': 3}
}
【输出示例】
最短路径: 宿舍 → 食堂 → 图书馆 → 体育馆 总步行时间: 6分钟
试题14:消防员救援任务(BFS最短步数)
【题目描述】
请使用BFS算法计算消防员从起点到火灾位置的最短步数,并输出路径。
【题目要求】
- 使用二维地图表示建筑布局;
- 实现BFS算法计算最短路径;
- 输出最短步数与路径坐标;
- 说明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数独难题。
【题目要求】
- 实现DFS递归算法填充数独格子;
- 应用剪枝优化,提前排除无效数字;
- 输入一个未完成的数独盘面(空格用0表示);
- 输出求解完成的数独盘面。
【题目说明】
# 示例数独题目 (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. 处理可能存在的天然不连通区域(生成最小生成森林)
【题目要求】
- 使用邻接表或邻接矩阵表示电力网络图;
- 实现最小生成树算法;
- 输出构成最小生成树的线路集合;
- 列出被识别为冗余的线路。
【题目说明】
# 发电站映射为数字: 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)结构构建一个知识问答系统的关键词索引,支持关键词的快速插入、检索和前缀匹配。
【题目要求】
- 实现字典树数据结构;
- 支持插入关键词及其关联信息(如答案ID);
- 实现前缀匹配搜索,返回所有匹配关键词;
- 输入查询前缀,输出匹配的关键词列表。
【题目说明】
# 创建知识库并插入一些问题
kb = KnowledgeBase()
kb.insert("什么是光合作用", "植物利用阳光制造食物的过程")
kb.insert("什么是计算机", "能自动执行计算的电子设备")
kb.insert("计算机病毒是什么", "能破坏计算机程序的恶意软件")
kb.insert("太阳系有多少行星", "太阳系有8大行星")
kb.insert("怎么学习编程", "从基础开始,多实践")
【输出示例】
=== 知识库结构 ===
问题: '什么是光合作用' -> 答案: '植物利用阳光制造食物的过程'
问题: '什么是计算机' -> 答案: '能自动执行计算的电子设备'
问题: '计算机病毒是什么' -> 答案: '能破坏计算机程序的恶意软件'
问题: '太阳系有多少行星' -> 答案: '太阳系有8大行星'
问题: '怎么学习编程' -> 答案: '从基础开始,多实践'
=== 精确查找测试 ===
问题: '什么是计算机'
答案: 能自动执行计算的电子设备
=== 前缀匹配测试 ===
输入前缀: '计算机'
匹配问题: '计算机病毒是什么' -> 答案: '能破坏计算机程序的恶意软件'
匹配问题: '什么是计算机' -> 答案: '能自动执行计算的电子设备'
试题18:城市供水管网与最大流问题(图的最大流)
【题目描述】
模拟城市供水管网系统,请使用最大流算法(如Edmonds-Karp)计算从水源点到居民区的最大供水量。
【题目要求】
- 使用有向图表示管网,边权表示管道容量;
- 实现最大流算法;
- 输入水源点、汇点及管网结构;
- 输出最大流量值及关键路径。
【题目说明】
# 创建一个供水管网
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小时内获得最佳体验?
| 项目名称 | 持续时间(分钟) | 娱乐价值 |
| 过山车 | 60 | 90 |
| 旋转木马 | 20 | 30 |
| 鬼屋 | 45 | 80 |
| 碰碰车 | 30 | 50 |
| 摩天轮 | 40 | 65 |
【题目要求】
- 1.多维条件的贪心决策
- 2.价值/时间比的计算与应用
- 3.动态优先级调整策略
- 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) | 美味度 | 健康度 |
| 苹果 | 1 | 3 | 5 |
| 薯片 | 2 | 5 | 1 |
| 三明治 | 3 | 4 | 4 |
| 果汁 | 1 | 2 | 3 |
| 巧克力 | 1 | 5 | 2 |
背包容量:5公斤
【输出示例】
选择的食物: [‘苹果’, ‘薯片’, ‘果汁’, ‘巧克力’]
总美味度: 15, 总健康度: 11
总重量: 5kg
试题21:网格最小路径规划
【题目描述】
小明在一个 n×m 的网格中,从左上角出发,每次只能向右或向下移动,要到达右下角。每个格子有一个数字代表通过该格子的代价。请找出路径上数字总和最小的路径,并输出最小代价。
【题目要求】
- 输入一个 n×m 的网格矩阵。
- 输出最小代价及具体路径(如:1→3→1→1→1)。
- 使用动态规划实现。
【题目说明】
# 测试网格
[1, 3, 1]
[1, 5, 1]
[4, 2, 1]
【输出示例】
最小路径:1→3→1→1→1
最小代价:1+3+1+1+1 = 7
试题22:篮球赛程价值最大化 – 带权区间调度
【题目描述】
市里举办篮球锦标赛,每场比赛有开始时间、结束时间和价值分数。要求选择若干场时间不冲突的比赛,使得总价值最大。
【题目要求】
- 输入比赛列表(开始时间、结束时间、价值)。
- 输出最大总价值。
- 使用动态规划实现,可结合二分查找优化。
【题目说明】
#测试用例
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),即在不改变顺序的情况下,两人能拿出的相同零食的最长排列。
【题目要求】
- 输入两个字符串,分别代表两人的零食序列。
- 输出最长公共子序列的长度及具体序列。
- 使用动态规划实现。
【题目说明】
# 测试数据
小明的零食:"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 网格,某些格子藏有宝藏。请设计一个高效算法,找出所有宝藏的位置。
【题目要求】
- 输入一个 N×N 的网格(0表示无宝藏,1表示有宝藏)。
- 输出所有宝藏的坐标。
- 使用二维分治算法实现,支持剪枝优化。
【题目说明】
# 校园地图示例 (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分钟的车流量动态调整绿灯时间分配比例。
【题目要求】
- 输入四个方向过去5分钟的车流量列表。
- 输出各方向绿灯时间分配比例(百分比)。
- 使用滑动窗口算法实现。
【题目说明】
车流量数据每分钟更新一次:
• 东:[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:游戏装备合成优先级系统 – 堆排序
【题目描述】
游戏中有多个装备需要合成,每个装备有稀有度、合成时间、材料价值三个属性。请根据优先级(稀有度 > 时间 > 价值)智能安排合成顺序。
【题目要求】
- 输入装备列表(名称、稀有度、时间、价值)。
- 输出按优先级排序的合成队列。
- 使用堆排序(优先队列)实现。
【题目说明】
# 测试数据
王者之剑 (传说, 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:零花钱记账本 – 前缀和与差分
【题目描述】
小明记录每周每天的零花钱使用情况,需要快速查询任意区间的花费总和,并支持动态更新某天的花费。
【题目要求】
- 输入一周的每日花费列表。
- 支持查询任意区间花费总和。
- 支持更新某一天的花费。
- 使用前缀和与差分技术实现。
【题目说明】
前缀和是什么?就像搭积木一样,我们把每天的消费累加起来:
每日消费:[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 柱,每次只能移动一个盘子,且大盘子不能放在小盘子上面。请输出移动步骤。
【题目要求】
- 输入盘子数量 n。
- 输出每一步的移动描述。
- 使用递归算法实现。
【输出示例】
=== 汉诺塔问题递归解法 ===
移动 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 个皇后,使得它们彼此不在同一行、同一列或同一斜线上。请找出所有可能的摆放方案。
【题目要求】
- 输入棋盘大小 N。
- 输出所有摆放方案(可用棋盘矩阵或皇后位置列表表示)。
- 使用回溯算法实现。
【输出示例】
8皇后问题总共有 92 种解决方案!

