
专业级初级题库 专业级高级题库 在线练习
❀ 专 业 级 初 级 题 库(共11题)❀ 返回最前
试题1:天气播报员
【题目描述】
设计一个天气信息格式化输出程序,使用转义字符和Unicode符号将温度、风力、紫外线强度等信息以标准化的格式展示。
【题目要求】
- 使用转义字符控制输出格式:
\n换行,\t制表符对齐。 - 使用Unicode符号增强可读性(如
\u2600表示太阳)。 - 输出内容必须包含:今日天气播报标题、温度、风力、紫外线强度。
- 格式需与示例完全一致。
【输出示例】
今日天气播报: 温度 28°C 风力 东北风3级 紫外线 ☀☀
试题2:零花钱管家
【题目描述】
编写一个零花钱储蓄计算程序,根据每周获得的零花钱数额,计算每月(按4周计)能够储蓄的金额,假设每月可储蓄金额为每周零花钱的20%。
【题目要求】
- 输入一个数字,表示每周零花钱数额。
- 计算每月储蓄金额:
每周零花钱 × 4 × 0.2。 - 输出结果保留一位小数。
【输出示例】
说明:以每周零花钱50元为例。
每周零花钱:50
每月可存:40.0元
试题3:过山车乘坐标准
【题目描述】
根据游乐园安全规定,设计一个过山车乘坐资格判断系统。系统需根据游客的年龄和身高,自动判断其是否符合乘坐标准。
【题目要求】
- 输入两个整数:年龄(岁)、身高(厘米)。
- 判断逻辑:
- 年龄≥10岁且身高≥150cm → 允许乘坐
- 年龄<10岁且身高≥140cm → 允许乘坐
- 其他情况 → 拒绝乘坐
- 输出对应的提示信息。
【输出示例】
说明:在此以年龄9岁,身高145厘米为例。同学们可以自行决定输入的年龄和身高。
请输入年龄: 9 请输入身高(cm): 145 符合过山车乘坐标准!
试题4:智能导诊分诊系统
【题目描述】
设计一个医院智能分诊系统,根据患者描述的症状和疼痛等级,自动推荐最合适的就诊科室,优化医疗资源分配。
【题目要求】
- 输入症状字符串(多个症状用逗号分隔)。
- 输入疼痛等级整数(1-10分)。
- 按以下优先级判断:
- 包含”呼吸困难” → 呼吸科优先就诊
- 包含”发烧”且疼痛>7分 → 急诊优先
- 包含”骨折” → 骨科挂号
- 其他 → 普通内科预检分诊
- 输出对应的科室建议。
【输出示例】
示例1:
输入:症状(用逗号分隔):发烧,头痛
疼痛等级(1-10):8
输出:急诊优先:发热伴剧烈疼痛
示例2:
输入:症状(用逗号分隔):咳嗽,呼吸困难
疼痛等级(1-10):5
输出:紧急通道:呼吸科优先就诊
示例3:
输入:症状(用逗号分隔):脚踝肿胀
疼痛等级(1-10):6
输出:请到普通内科预检分诊
试题5:闰年世纪校准器
【题目描述】
编写一个闰年判断程序,根据格里高利历法规则精确判断输入年份是否为闰年,并输出相应提示。
【题目要求】
- 输入一个整数年份。
- 闰年判断规则:能被4整除但不能被100整除,或能被400整除。
- 输出格式:”[年份]是闰年(二月有29天)”或”[年份]是平年(二月28天)”。
【输出示例】
2024 2024是闰年(二月有29天)
试题6:智能公交时刻表生成器
【题目描述】
设计一个公交发车时刻表生成程序,根据给定的运营时间范围(6:00-22:00)和发车间隔(15分钟),生成所有车次的发车时间。
【题目要求】
- 使用循环结构生成6:00至22:00之间所有发车时间点。
- 发车间隔为15分钟。
- 输出时间格式必须为
HH:MM,小时和分钟均为两位数(不足补零)。 - 每行输出一个时间点。
【输出示例】
06:00
06:15
06:30
06:45
07:00
07:15
07:30
07:45
08:00
08:15
08:30
08:45
09:00
09:15
09:30
09:45
10:00
10:15
10:30
10:45
11:00
11:15
11:30
11:45
12:00
12:15
12:30
12:45
13:00
13:15
13:30
13:45
14:00
14:15
14:30
14:45
15:00
15:15
15:30
15:45
16:00
16:15
16:30
16:45
17:00
17:15
17:30
17:45
18:00
18:15
18:30
18:45
19:00
19:15
19:30
19:45
20:00
20:15
20:30
20:45
21:00
21:15
21:30
21:45
22:00
试题7:智能存钱罐计算器
【题目描述】
设计一个阶梯式存钱计划计算程序,按照第1天存1元,第2天存2元…第n天存n元的规则,连续存款达到指定天数或目标金额时的情况。
【题目要求】
- 计算连续存30天的总金额。
- 计算存到至少1000元所需的最少天数。
- 输出两个结果:
- 30天总金额
- 达到1000元所需天数
【输出示例】
连续存30天总金额:465元 存到1000元至少需要:45天
试题8:神奇数字三角形
【题目描述】
编写程序生成特定规律的数字三角形:第n行为从1递增到n再递减到1的数字序列。
【题目要求】
- 输入一个整数n,表示三角形行数。
- 输出n行数字三角形,每行格式为对称数字序列。
- 数字之间不留空格。
【输出示例】
输入:3 输出: 1 121 12321
试题9:智能购物车系统
【题目描述】
设计一个超市购物车结算系统,能够计算商品总价、识别最贵商品,并在满足条件时自动应用折扣。
【题目要求】
- 商品列表以列表形式给出,格式为
[名称1, 价格1, 名称2, 价格2, ...]。 - 计算所有商品总价。
- 找出价格最高的商品。
- 若总价≥100元,则打9折。
- 输出总价(保留两位小数)、最贵商品名称及折扣后价格(如适用)。
【输出示例】
商品列表:["苹果",5.8, "牛奶",3.5, "面包",4.2]
总金额:13.50元
最贵商品:苹果
商品列表:["大米", 78, "牛肉", 35, "鱼", 17, "青菜", 5]
总金额:121.50元
最贵商品:大米
试题10:单词统计大师
【题目描述】
设计一个英文文本分析程序,统计给定文本中每个单词的出现频率,忽略大小写和标点符号。
【题目要求】
- 输入一段英文文本。
- 将所有单词转换为小写,去除标点符号。
- 统计每个单词的出现次数。
- 输出每个单词及其出现次数,按单词字母顺序排序。
【示例文本】
text = "Hello world! Hello Python. Python is fun, fun, fun!"
【输出示例】
输入:Hello world! Hello Python. 输出: hello: 2 python: 1 world: 1
试题11:小青蛙跳荷叶
【题目描述】
设计一个模拟青蛙跳跃的程序,青蛙需要依次跳过n片荷叶,每次跳跃输出当前位置。
【题目要求】
- 输入荷叶总数n。
- 模拟青蛙从第1片荷叶跳到第n片荷叶的过程。
- 每次跳跃输出当前所在荷叶编号。
- 使用循环结构实现。
【输出示例】
荷叶总数:5 跳到了第1片荷叶 跳到了第2片荷叶 跳到了第3片荷叶 跳到了第4片荷叶 跳到了第5片荷叶
❀ 专 业 级 高 级 题 库(共30题)❀ 返回最前
试题1:考试成绩统计分析——列表遍历与统计
【题目描述】
编写一个程序,读取一个班级的数学成绩列表,计算并输出以下统计信息:
- 全班总分
- 平均分(保留一位小数)
- 最高分
- 最低分
- 高于平均分的学生人数
【题目要求】
- 使用列表存储成绩数据。
- 使用循环遍历列表,并调用内置函数完成统计。
- 输出格式需清晰,包含必要的中文说明。
【输出示例】
=== 考试成绩统计分析 === 全班数学成绩: [85, 92, 78, 90, 88, 95, 82, 76, 89, 93] 带编号的成绩显示: 学生1的成绩:85分 学生2的成绩:92分 ... 学生10的成绩:93分 === 统计结果 === 全班总分:868分 平均分:86.8分 最高分:95分 最低分:76分 高于平均分的学生人数:6人
试题2:括号匹配检测器——栈的应用
【题目描述】
编写一个程序,判断一个表达式中的括号是否匹配。支持的括号类型包括:圆括号 ()、方括号 []、花括号 {}。
【题目要求】
- 使用栈结构实现括号匹配检测。
- 程序应能处理包含多种括号的表达式。
- 输出检测结果,并说明是否匹配。
【输出示例】
括号匹配检测结果:
'(3 + [5 × {2 + 1}])':通过 (预期: True, 实际: True)
'(3 + [5 × {2 + 1)]':通过 (预期: False, 实际: False)
'{[()]}':通过 (预期: True, 实际: True)
'{[(])}':通过 (预期: False, 实际: False)
'((()))':通过 (预期: True, 实际: True)
'[{[()]}]':通过 (预期: True, 实际: True)
'abc(def[ghi]jkl)mno':通过 (预期: True, 实际: True)
'no brackets here':通过 (预期: True, 实际: True)
试题3:银行叫号系统——多队列管理
【题目描述】
模拟一个银行叫号系统,支持三类客户:VIP客户、对公客户、普通客户。系统应按照优先级顺序叫号,并实时显示各队列状态。
【题目要求】
- 实现三个独立队列,分别对应不同客户类型。
- 叫号顺序为:VIP → 对公 → 普通。
- 支持取号、叫号、显示队列状态等功能。
【输出示例】
===== 客户开始取号 =====
普通客户 N1001 已取号,前面有 0 位普通客户等待
VIP客户 V1002 已取号,前面有 0 位VIP客户等待
普通客户 N1003 已取号,前面有 1 位普通客户等待
对公客户 C1004 已取号,前面有 0 位对公客户等待
VIP客户 V1005 已取号,前面有 1 位VIP客户等待
普通客户 N1006 已取号,前面有 2 位普通客户等待
=== 当前排队情况 ===
VIP队列(2人): ['V1002', 'V1005']
对公队列(1人): ['C1004']
普通队列(3人): ['N1001', 'N1003', 'N1006']
==================
===== 开始叫号 =====
请 V1002 到1号窗口办理业务(VIP优先)
V1002 业务办理完成
请 V1005 到1号窗口办理业务(VIP优先)
V1005 业务办理完成
请 C1004 到2号窗口办理业务(对公业务)
C1004 业务办理完成
请 N1001 到3号窗口办理业务(普通业务)
N1001 业务办理完成
请 N1003 到3号窗口办理业务(普通业务)
N1003 业务办理完成
请 N1006 到3号窗口办理业务(普通业务)
N1006 业务办理完成
当前没有客户等待
=== 当前排队情况 ===
VIP队列(0人): []
对公队列(0人): []
普通队列(0人): []
==================
试题4:课间操站位网格——二维数组管理队列位置
【题目描述】
使用二维数组模拟课间操站位系统,每个位置对应一个班级和一个学号。系统支持定位学生、交换位置、新增班级等功能。
【题目要求】
- 使用嵌套列表实现二维数组。
- 实现学生定位、位置交换、新增班级等方法。
- 输出网格当前状态。
【输出示例】
当前课间操站位网格:
1班-1号 | 1班-2号 | 1班-3号 | 1班-4号 | 1班-5号
2班-1号 | 2班-2号 | 2班-3号 | 2班-4号 | 2班-5号
3班-1号 | 3班-2号 | 3班-3号 | 3班-4号 | 3班-5号
共 3 个班级,每班 5 人
定位测试:
2班3号位置: 2班-3号
5班1号位置: 位置不存在
交换位置测试:
已交换: (1, 2) 和 (3, 4) 的位置
当前课间操站位网格:
1班-1号 | 3班-4号 | 1班-3号 | 1班-4号 | 1班-5号
2班-1号 | 2班-2号 | 2班-3号 | 2班-4号 | 2班-5号
3班-1号 | 3班-2号 | 3班-3号 | 1班-2号 | 3班-5号
共 3 个班级,每班 5 人
新增班级测试:
新增 4班 完成
当前课间操站位网格:
1班-1号 | 3班-4号 | 1班-3号 | 1班-4号 | 1班-5号
2班-1号 | 2班-2号 | 2班-3号 | 2班-4号 | 2班-5号
3班-1号 | 3班-2号 | 3班-3号 | 1班-2号 | 3班-5号
4班-1号 | 4班-2号 | 4班-3号 | 4班-4号 | 4班-5号
共 4 个班级,每班 5 人
网格遍历演示:
1班-1号 | 3班-4号 | 1班-3号 | 1班-4号 | 1班-5号 |
2班-1号 | 2班-2号 | 2班-3号 | 2班-4号 | 2班-5号 |
3班-1号 | 3班-2号 | 3班-3号 | 1班-2号 | 3班-5号 |
4班-1号 | 4班-2号 | 4班-3号 | 4班-4号 | 4班-5号 |
试题5:学生成绩管理系统——嵌套字典
【题目描述】
设计一个学生成绩管理系统,使用嵌套字典存储学生姓名、各科成绩,并支持查询成绩、计算平均分。
【题目要求】
- 使用字典嵌套字典的结构存储数据。
- 支持按学生姓名查询成绩。
- 输出该学生的各科成绩及平均分。
【输出示例】
=== 学生成绩查询系统 === 请输入学生姓名:小明 小明的成绩单: 数学: 90分 语文: 85分 英语: 88分 平均分: 87.7分
试题6:抽奖系统去重——集合唯一性
【题目描述】
编写一个抽奖系统,自动去除重复的参与者,确保每人仅有一次中奖机会,并展示去重后的参与者名单。
【题目要求】
- 使用集合去除重复名字。
- 随机选择一名中奖者。
- 输出去重后的名单及中奖者。
【输出示例】
=== 幸运抽奖系统 ===
原始参与者名单: ['小明', '小红', '小刚', '小红', '小丽', '小明', '小强']
去重后的唯一参与者: {'小强', '小刚', '小明', '小丽', '小红'}
恭喜 小红 中奖啦!
试题7:单词拼写检查器——线性查找与时间复杂度
【题目描述】
给定一个无序的单词词典列表,编写一个程序,检查用户输入的单词是否在词典中。要求使用线性查找算法实现,并记录比较次数与查找时间。
【题目要求】
- 使用线性查找在无序列表中查找单词。
- 记录查找过程中的比较次数和实际耗时。
- 输出查找结果及统计信息。
【题目说明】
# 无序的常用单词词典(前20个单词作为示例)
word_dictionary = [
'apple', 'book', 'cat', 'dog', 'egg',
'fish', 'girl', 'hat', 'ice', 'jump',
'kite', 'love', 'moon', 'nose', 'orange',
'pig', 'queen', 'rabbit', 'sun', 'tree'
]
【输出示例】
请输入要检查的单词: dog 拼写正确!单词 'dog' 在词典的第4个位置。 查找统计: - 比较次数: 4次 - 查找时间: 0.0041毫秒 - 词典大小: 20个单词
试题8:图书馆找书系统——二分查找算法
【题目描述】
假设图书馆的图书已按书名拼音顺序排列,编写一个程序,使用二分查找算法快速定位指定图书的位置。
【题目要求】
- 实现二分查找算法。
- 输出查找过程中每次检查的图书名称。
- 返回图书在列表中的位置(从1开始计数)。
【题目说明】
# 模拟已排序的图书馆藏书(按书名拼音顺序)
books = [
"ATSTH安徒生童话", "BKQS百科全书", "HLBT哈利波特", "HLM红楼梦",
"JYQJ金庸全集", "ST体", "SW十万个为什么", "XYJ西游记",
"XWZ小王子", "ZGLS中国历史"
【输出示例】
开始在图书馆查找:《HLBT哈利波特》 正在检查:《JYQJ金庸全集》 正在检查:《BKQS百科全书》 正在检查:《HLBT哈利波特》 找到了!《HLBT哈利波特》在第3个书架位置
试题9:垃圾分类助手——多属性选择排序
【题目描述】
给定一组垃圾数据,包含名称、类型和重量三个属性,编写一个程序,实现按类型排序、以及按类型和重量双重排序的功能。
【题目要求】
- 实现支持多属性排序的选择排序算法。
- 分别按“类型”和“类型+重量”排序并输出结果。
- 使用字典列表存储垃圾数据。
【题目说明】
# 垃圾数据:名称、类型(1:可回收 2:有害 3:厨余 4:其他)、重量(kg)
trash_items = [
{"name": "旧报纸", "type": 1, "weight": 0.5},
{"name": "电池", "type": 2, "weight": 0.1},
{"name": "香蕉皮", "type": 3, "weight": 0.2},
{"name": "塑料袋", "type": 4, "weight": 0.05},
{"name": "玻璃瓶", "type": 1, "weight": 0.3},
{"name": "药品", "type": 2, "weight": 0.05},
{"name": "剩饭", "type": 3, "weight": 1.2},
{"name": "餐巾纸", "type": 4, "weight": 0.1}
]
【输出示例】
=== 按类型排序 ===
旧报纸: 类型1, 重量0.5kg
玻璃瓶: 类型1, 重量0.3kg
电池: 类型2, 重量0.1kg
药品: 类型2, 重量0.05kg
香蕉皮: 类型3, 重量0.2kg
剩饭: 类型3, 重量1.2kg
塑料袋: 类型4, 重量0.05kg
餐巾纸: 类型4, 重量0.1kg
=== 按类型和重量排序 ===
玻璃瓶: 类型1, 重量0.3kg
旧报纸: 类型1, 重量0.5kg
药品: 类型2, 重量0.05kg
电池: 类型2, 重量0.1kg
香蕉皮: 类型3, 重量0.2kg
剩饭: 类型3, 重量1.2kg
塑料袋: 类型4, 重量0.05kg
餐巾纸: 类型4, 重量0.1kg
试题10:停车场车牌排序系统——冒泡排序
【题目描述】
给定一组车牌号,编写一个程序,使用冒泡排序算法按照以下规则排序:
- 按省份简称拼音顺序排序
- 省份相同则按字母顺序排序
- 字母相同则按数字部分排序
【题目要求】
- 实现冒泡排序算法,支持多级比较。
- 使用自定义比较函数处理省份、字母和数字。
- 输出排序前后的车牌列表。
【题目说明】
# 省份简称到拼音的映射(简化版)
province_pinyin = {
'京': 'jing', '沪': 'hu', '津': 'jin', '渝': 'yu',
'冀': 'ji', '晋': 'jin', '辽': 'liao', '吉': 'ji',
'黑': 'hei', '苏': 'su', '浙': 'zhe', '皖': 'wan',
'闽': 'min', '赣': 'gan', '鲁': 'lu', '豫': 'yu',
'鄂': 'e', '湘': 'xiang', '粤': 'yue', '琼': 'qiong',
'川': 'chuan', '贵': 'gui', '云': 'yun', '陕': 'shan',
'甘': 'gan', '青': 'qing', '藏': 'zang', '蒙': 'meng',
'桂': 'gui', '宁': 'ning', '新': 'xin'
}
【输出示例】
原始车牌顺序:
京A12345
沪B23456
京B12345
粤A99999
京A99999
沪A00001
京C11111
粤B11111
京A11111
沪A11111
排序后车牌顺序:
沪A00001
沪A11111
沪B23456
京A11111
京A12345
京A99999
京B12345
京C11111
粤A99999
粤B11111
试题11:直播礼物实时排行榜——插入排序优化
【题目描述】
模拟直播平台礼物排行榜,每当有观众送出礼物时,实时更新主播的礼物值,并维护一个按礼物值降序排列的榜单。
【题目要求】
- 使用插入排序算法实时更新排序。
- 每次送礼后输出最新排行榜。
- 支持多名主播的礼物值动态更新。
【题目说明】
# 初始化5位主播和他们的礼物值
anchors = ["主播小A", "主播小B", "主播小C", "主播小D", "主播小E"]
gifts = [0] * 5 # 初始礼物值都是0
【输出示例】
直播礼物实时排行榜
当前排名:
第1名: 主播小A - 0礼物
第2名: 主播小B - 0礼物
...
主播小C 收到 45 礼物!
最新排行榜:
第1名: 主播小C - 45礼物
第2名: 主播小A - 0礼物
...
主播小B 收到 78 礼物!
最新排行榜:
第1名: 主播小B - 78礼物
第2名: 主播小C - 45礼物
...
试题12:电商商品多条件筛选——快速排序的高级应用
【题目描述】
给定一组商品数据(包含名称、价格、销量、评分),编写一个程序,支持按单属性(如价格)或多属性(如评分+价格)进行排序。
【题目要求】
- 实现快速排序算法,支持多关键字排序。
- 可分别按价格升序、销量降序、评分降序+价格升序等规则排序。
- 输出排序后的商品列表。
【题目说明】
# 模拟电商商品数据
products = [
{"name": "手机", "price": 2999, "sales": 500, "rating": 4.7},
{"name": "耳机", "price": 399, "sales": 1200, "rating": 4.3},
{"name": "平板", "price": 1999, "sales": 800, "rating": 4.5},
{"name": "笔记本", "price": 5999, "sales": 300, "rating": 4.8},
{"name": "智能手表", "price": 999, "sales": 1500, "rating": 4.4},
{"name": "充电宝", "price": 99, "sales": 2500, "rating": 4.2},
]
【输出示例】
按价格升序排序:
充电宝: ¥99
耳机: ¥399
智能手表: ¥999
平板: ¥1999
手机: ¥2999
笔记本: ¥5999
按销量降序排序:
充电宝: 销量2500
智能手表: 销量1500
耳机: 销量1200
平板: 销量800
手机: 销量500
笔记本: 销量300
按评分降序,价格升序排序:
笔记本: 评分4.8, ¥5999
手机: 评分4.7, ¥2999
平板: 评分4.5, ¥1999
智能手表: 评分4.4, ¥999
耳机: 评分4.3, ¥399
充电宝: 评分4.2, ¥99
试题13:地铁最短路线规划——Dijkstra算法
【题目描述】
小明的城市有两条地铁线路:
- 🟥 红线:学校站 → 公园站(5分钟)→ 商场站(5分钟)→ 游乐园站
- 🟦 蓝线:学校站 → 图书馆站(5分钟)→ 游乐园站
在公园站可以换乘(需要3分钟),帮小明找到从学校去游乐园的最快路线!
给定一个地铁线路图(含换乘站及行程时间),编写一个程序,计算从起点到终点的最短时间路径。
【题目要求】
- 使用Dijkstra算法计算最短路径。
- 输出最短时间及完整路径。
- 支持多条线路及换乘时间计算。
【输出示例】
红线直达: (15, ['红_学校', '红_公园', '红_商场', '红_游乐园']) 蓝线直达: (10, ['蓝_学校', '蓝_图书馆', '蓝_游乐园']) 换乘路线: (13, ['红_学校', '红_公园', '蓝_图书馆', '蓝_游乐园'])
试题14:用社交网络学习BFS和三度人脉算法
【题目描述】
给定一个社交关系图,编写一个程序,从指定用户出发,找出其一度、二度和三度人脉(即朋友、朋友的朋友、朋友的朋友的朋友)。
【题目要求】
- 使用BFS算法按层级遍历社交网络。
- 输出各度人脉的用户列表。
- 限制遍历深度为三度。
【题目说明】
#测试数据
小红的直接好友:小明、小华
小明的好友:小红、小强、小丽
小华的好友:小红、小美
小强的好友:小明、小刚
小丽的好友:小明
小美的好友:小华
小刚的好友:小强
【输出示例】
小红的好友推荐系统结果: 1度人脉推荐: 小明, 小华 2度人脉推荐: 小强, 小丽, 小美 3度人脉推荐: 小刚
试题15:校园谣言传播——有向图可达性分析(DFS/BFS)
【题目描述】
给定一个谣言传播的有向图,编写一个程序,计算从源头开始所有可能听到谣言的节点,以及在限定时间内能传播到的节点。
【题目要求】
- 使用DFS计算所有可达节点。
- 使用BFS计算在指定时间内的传播范围。
- 输出节点列表及传播时间。
【题目说明】
# 测试数据
课间10分钟,一条"明天停课"的谣言从同学A开始传播:
• A首先告诉B和C
• B又告诉D
• C告诉E
• D又告诉E(E听到两次)
问题:
1. 从A出发,哪些同学会听到谣言?
2. 如果谣言在5分钟内能传播多远?(假设每次传播需要1分钟)
将同学看作节点,谣言传播方向看作有向边,问题转化为有向图的可达性分析。
【输出示例】
从A出发会听到谣言的同学: ['A', 'B', 'C', 'D', 'E']
5分钟内谣言传播情况:
A: 0分钟
B: 1分钟
C: 1分钟
D: 2分钟
E: 2分钟
试题16:乐高城堡稳固结构与最小生成树
【题目描述】
给定多个塔楼(节点)及其之间可能的连接桥(边)与建造成本(权重),编写一个程序,设计一个连接所有塔楼且总成本最低的桥梁方案。
【题目要求】
- 使用Prim算法构建最小生成树。
- 输出每条连接桥及其成本。
- 计算并输出总成本。
【题目说明】
已知塔楼间可能的连接桥及其需要的积木数量:
• A-B: 5块
• A-C: 9块
• A-D: 12块
• B-C: 8块
• B-D: 14块
• C-D: 10块
【输出示例】
最优乐高城堡连接方案: A-B: 5块积木 B-C: 8块积木 C-D: 10块积木 总共需要积木: 23块
试题17:用学校组织学习广度优先搜索
【题目描述】
模拟一个学校组织结构树,编写一个程序,使用广度优先搜索遍历整个组织,并计算组织的高度(层数)。
【题目要求】
- 使用BFS遍历树结构。
- 按层输出组织成员。
- 输出组织结构的总层数。
【题目说明】
# 构建学校组织结构
principal = SchoolMember("张校长", "校长")
dean1 = SchoolMember("李主任", "教导主任")
dean2 = SchoolMember("王主任", "后勤主任")
teacher1 = SchoolMember("赵老师", "语文老师")
teacher2 = SchoolMember("钱老师", "数学老师")
class1 = SchoolMember("一班", "班级")
class2 = SchoolMember("二班", "班级")
【输出示例】
=== 开始遍历 ===
=== 学校组织架构 ===
第 1 层:校长(张校长)
第 2 层:教导主任(李主任) 后勤主任(王主任)
第 3 层:语文老师(赵老师) 数学老师(钱老师)
第 4 层:班级(一班) 班级(二班)
学校管理结构的高度是:4层
试题18:旅游景点路线规划与最短路径
【题目描述】
给定一个旅游区景点分布图(加权无向图),编写一个程序,计算从指定起点到终点的最短时间路径。
【题目要求】
- 使用Dijkstra算法计算最短路径。
- 输出完整路径及总时间。
- 支持多组起点-终点查询。
【题目说明】
旅游景点示例-我们有5个景点:
0: 熊猫馆
1: 恐龙乐园
2: 水上世界
3: 太空探索
4: 童话城堡
步行道连接及行走时间:
熊猫馆 ↔ 恐龙乐园:5分钟
熊猫馆 ↔ 水上世界:10分钟
恐龙乐园 ↔ 童话城堡:20分钟
恐龙乐园 ↔ 水上世界:3分钟
水上世界 ↔ 太空探索:8分钟
太空探索 ↔ 童话城堡:6分钟
【输出示例】
=== 旅游区景点 ===
0: 熊猫馆
1: 恐龙乐园
2: 水上世界
3: 太空探索
4: 童话城堡
=== 步行道连接及时间(分钟) ===
熊猫馆 ↔ 恐龙乐园: 5分钟
熊猫馆 ↔ 水上世界: 10分钟
恐龙乐园 ↔ 熊猫馆: 5分钟
恐龙乐园 ↔ 水上世界: 3分钟
恐龙乐园 ↔ 童话城堡: 20分钟
水上世界 ↔ 熊猫馆: 10分钟
水上世界 ↔ 恐龙乐园: 3分钟
水上世界 ↔ 太空探索: 8分钟
太空探索 ↔ 水上世界: 8分钟
太空探索 ↔ 童话城堡: 6分钟
童话城堡 ↔ 恐龙乐园: 20分钟
童话城堡 ↔ 太空探索: 6分钟
=== 最短路径查询结果 ===
从 熊猫馆 到 童话城堡 的最短路径是:
熊猫馆 → 恐龙乐园 → 水上世界 → 太空探索 → 童话城堡
总时间: 22分钟
=== 最短路径查询结果 ===
从 水上世界 到 童话城堡 的最短路径是:
水上世界 → 太空探索 → 童话城堡
总时间: 14分钟
试题19:用兴趣班时间安排学习贪心算法
【题目描述】
给定多个兴趣班的开始和结束时间,编写一个程序,选择最多数量的不冲突课程。
【题目要求】
- 使用贪心算法(按结束时间排序)选择课程。
- 输出所选课程列表及总数。
- 确保课程时间不重叠。
【题目说明】
# 测试数据
courses = [
("美术课", 9, 10),
("舞蹈课", 9.5, 10.5),
("编程课", 10, 11),
("音乐课", 10.5, 11.5),
("书法课", 11, 12)
]
【输出示例】
最多可以安排的不冲突课程: ['美术课', '编程课', '书法课'] 总共可以安排 3 门课程
试题20:暑假各科分数提升与时间分配——分组背包问题
【题目描述】
给定多个学科组,每组包含若干复习计划(需天数、可提分数),在总天数限制下,每组至多选择一项计划,求最大总分提升。
【题目要求】
- 使用分组背包的动态规划算法求解。
- 输出最优复习计划及总分提升。
- 使用滚动数组优化空间。
【题目说明】
学科分组:
1.语文组:
•背古诗:2天,可提高5分
•阅读训练:3天,可提高8分
•作文练习:4天,可提高10分
2.数学组:
•基础题训练:1天,可提高3分
•难题攻克:3天,可提高7分
•模拟测试:5天,可提高12分
3.英语组:
•单词记忆:2天,可提高6分
•听力训练:3天,可提高9分
•语法练习:4天,可提高11分
规则:
•每组最多选择一项复习计划
•总时间不超过10天
【输出示例】
动态规划(滚动数组)解法:
最大分数提升: 26分
复习计划安排:
第1组: 3天复习,提高8分
第2组: 5天复习,提高12分
第3组: 2天复习,提高6分
总使用天数: 10天 (≤10天)
试题21:吃糖果大冒险——探索动态规划
【题目描述】
小明每天可以吃1块或2块糖果,编写一个程序,计算吃完n块糖果的不同方式数。
【题目要求】
- 使用动态规划递推求解。
- 输出方式总数。
- 理解状态转移方程:dp[i] = dp[i-1] + dp[i-2]。
【题目说明】
• 可以每天吃1块,10天吃完:1+1+1+1+1+1+1+1+1+1
• 可以某几天吃2块:1+2+1+2+1+2+1
• 也可以连续几天吃2块:2+2+2+2+2
【输出示例】
吃完10块糖果的不同方式有:89种
试题22:教室借用安排——区间分组
【题目描述】
给定多个社团的活动时间区间,编写一个程序,计算最少需要多少间教室,使得所有活动不冲突。
【题目要求】
- 使用贪心算法(按开始时间排序)结合最小堆实现。
- 输出最少教室数量。
- 模拟活动安排过程并输出每一步状态。
【题目说明】
"""
计算最少需要的教室数量
参数:
activities -- 活动列表,每个活动是[start, end]格式
返回:
最少需要的教室数量
"""
【输出示例】
=== 测试用例===
按开始时间排序后的活动:[[1, 3], [2, 4], [3, 5], [4, 6]]
处理活动:[1, 3]
需要新开一间教室
当前教室状态(结束时间):[3]
处理活动:[2, 4]
需要新开一间教室
当前教室状态(结束时间):[3, 4]
处理活动:[3, 5]
安排到最早空闲的教室(原结束时间:4)
当前教室状态(结束时间):[4, 5]
处理活动:[4, 6]
安排到最早空闲的教室(原结束时间:5)
当前教室状态(结束时间):[5, 6]
最少需要 2 间教室
试题23:乐高拼写游戏——字符串DP
【题目描述】
给定目标单词和一堆字母积木,编写一个程序,判断是否能用积木恰好拼出目标单词。
【题目要求】
- 使用字符计数或动态规划方法判断。
- 输出是否可拼出及缺少或多出的字母。
- 展示DP状态转移过程(如使用)。
【题目说明】
"""
判断是否能用积木拼出目标单词
参数:
target -- 目标单词
blocks -- 可用积木字符串
返回:
是否能够拼出
"""
【输出示例】
=== 测试用例1:可以拼出 ===
目标单词 'LEGO' 需要字母: {'L': 1, 'E': 1, 'G': 1, 'O': 1}
可用积木 'GOLE' 提供字母: {'G': 1, 'O': 1, 'L': 1, 'E': 1}
所有字母都足够!可以拼出目标单词
结果: True
=== 测试用例2:有多余字母 ===
目标单词 'CAT' 需要字母: {'C': 1, 'A': 1, 'T': 1}
可用积木 'CABT' 提供字母: {'C': 1, 'A': 1, 'B': 1, 'T': 1}
有多余字母: {'B'}
所有字母都足够!可以拼出目标单词
结果: True
=== DP方法测试 ===
DP方法分析:
目标单词长度: 3
积木统计: {'C': 1, 'A': 1, 'B': 1}
使用积木 'A' 匹配目标第1个字符,dp[1] = 1
使用积木 'B' 匹配目标第2个字符,dp[2] = 1
使用积木 'C' 匹配目标第3个字符,dp[3] = 1
DP方法结果: True
试题24:电子宠物社交系统——社交网络图结构
【题目描述】
模拟一个电子宠物社交网络,编写一个程序,实现朋友查询、最短关系链查找、最受欢迎宠物推荐等功能。
【题目要求】
- 使用邻接表表示图结构。
- 实现BFS遍历、最短路径查找、度中心性计算。
- 输出查询结果。
【题目说明】
# 创建宠物社交网络
pet_network = PetSocialNetwork()
# 添加宠物
pet_network.add_pet('p1', '豆豆', '电子狗')
pet_network.add_pet('p2', '毛毛', '电子猫')
pet_network.add_pet('p3', '花花', '电子兔')
pet_network.add_pet('p4', '球球', '电子仓鼠')
pet_network.add_pet('p5', '闪电', '电子狐狸')
pet_network.add_pet('p6', '泡泡', '电子鱼')
# 建立友谊关系
pet_network.add_friendship('p1', 'p2') # 豆豆-毛毛
pet_network.add_friendship('p1', 'p3') # 豆豆-花花
pet_network.add_friendship('p2', 'p4') # 毛毛-球球
pet_network.add_friendship('p3', 'p4') # 花花-球球
pet_network.add_friendship('p3', 'p5') # 花花-闪电
pet_network.add_friendship('p4', 'p6') # 球球-泡泡
【输出示例】
豆豆的直接朋友: ['花花', '毛毛']
从豆豆出发的BFS遍历顺序: ['豆豆', '毛毛', '花花', '球球', '闪电', '泡泡']
豆豆到泡泡的最短友谊链: ['豆豆', '毛毛', '球球', '泡泡']
最受欢迎的宠物: 花花 (3个朋友)
给豆豆的朋友推荐: ['球球', '闪电']
试题25:乐高城堡建造——分治算法
【题目描述】
使用分治算法模拟多人分工建造乐高城堡的过程,将任务分解为独立子任务,最后合并结果。
【题目要求】
- 实现递归分治逻辑。
- 模拟分工建造过程并输出步骤。
- 输出最终建造完成的所有部分。
【题目说明】
# 城堡的组成部分
castle_parts = ["东城墙", "西城墙", "北塔楼", "南塔楼"]
# 建造工人
workers = ["小明", "小红", "小刚", "小丽"]
【输出示例】
=== 开始建造乐高城堡 ===
分工建造: ['小明', '小红']负责['东城墙', '西城墙'], ['小刚', '小丽']负责['北塔楼', '南塔楼']
分工建造: ['小明']负责['东城墙'], ['小红']负责['西城墙']
小明正在建造东城墙...
小明的东城墙: 已完成 1/3
小明的东城墙: 已完成 2/3
小明的东城墙: 已完成 3/3
小明完成了东城墙!
小红正在建造西城墙...
小红的西城墙: 已完成 1/3
小红的西城墙: 已完成 2/3
小红的西城墙: 已完成 3/3
小红完成了西城墙!
分工建造: ['小刚']负责['北塔楼'], ['小丽']负责['南塔楼']
小刚正在建造北塔楼...
小刚的北塔楼: 已完成 1/3
小刚的北塔楼: 已完成 2/3
小刚的北塔楼: 已完成 3/3
小刚完成了北塔楼!
小丽正在建造南塔楼...
小丽的南塔楼: 已完成 1/3
小丽的南塔楼: 已完成 2/3
小丽的南塔楼: 已完成 3/3
小丽完成了南塔楼!
=== 所有部分建造完成! ===
最终城堡包含: 建造好的东城墙, 建造好的西城墙, 建造好的北塔楼, 建造好的南塔楼
试题26:用滑动窗口统计游戏连击技能伤害
【题目描述】
给定一个攻击伤害序列,使用滑动窗口算法,找出连续攻击伤害总和不超过100的最长连击段。
【题目要求】
- 实现可变大小滑动窗口。
- 输出最长连击次数及总伤害。
- 实时更新窗口并输出状态(可选)。
【题目说明】
举例说明:
攻击伤害:[20, 30, 40, 15, 25, 50]
最长连击若是第2-5次攻击(30+40+15+25=110>100不行,30+40+15=85可以),共3次攻击,总和85
【输出示例】
最长连击3次,总伤害90
试题27:用医院急诊分诊学习堆排序
【题目描述】
模拟医院急诊分诊系统,根据病人紧急程度和到达时间,使用优先队列(最小堆)安排就诊顺序。
【题目要求】
- 使用堆实现多条件优先级队列。
- 支持病人挂号、治疗下一位病人、显示等待列表。
- 输出就诊顺序和等待队列。
【题目说明】
# 创建急诊室
hospital = EmergencyRoom()
# 模拟病人到来
print("=== 医院急诊分诊系统 ===")
hospital.add_patient(2, "小明") # 紧急程度2级
hospital.add_patient(1, "小红") # 紧急程度1级(最紧急)
hospital.add_patient(3, "小刚")
hospital.add_patient(1, "小丽") # 紧急程度1级,但比小红晚到
【输出示例】
=== 医院急诊分诊系统 ===
小明 已挂号,紧急程度2级
小红 已挂号,紧急程度1级
小刚 已挂号,紧急程度3级
小丽 已挂号,紧急程度1级
=== 当前等待情况 ===
当前等待病人列表:
排名 | 姓名 | 紧急程度 | 到达时间
----------------------------------------
1 | 小红 | 1 | 02:05:33
2 | 小丽 | 1 | 02:05:33
3 | 小明 | 2 | 02:05:33
4 | 小刚 | 3 | 02:05:33
=== 开始治疗 ===
正在治疗: 小红 (紧急程度1级, 到达时间02:05:33)
正在治疗: 小丽 (紧急程度1级, 到达时间02:05:33)
正在治疗: 小明 (紧急程度2级, 到达时间02:05:33)
=== 等待情况 ===
当前等待病人列表:
排名 | 姓名 | 紧急程度 | 到达时间
----------------------------------------
1 | 小刚 | 3 | 02:05:33
试题28:灯泡开关谜题——位运算
【题目描述】
使用位运算模拟多个灯泡的状态控制,支持翻转单个或全部灯泡,并判断是否达到全亮状态。
【题目要求】
- 使用整数二进制位表示灯泡状态。
- 使用异或运算实现翻转。
- 输出操作后的状态及是否全亮。
【题目说明】
• 1 表示灯泡亮 💡
• 0 表示灯泡灭 ⚫
• 用异或操作 ^ 来翻转灯泡状态
【输出示例】
=== 灯泡游戏 ===
可用的操作:
1. 翻转第1个灯泡 (001)
2. 翻转第2个灯泡 (010)
3. 翻转第3个灯泡 (100)
4. 翻转所有灯泡 (111)
请选择操作(1-4): 1
操作后的状态: 0b111
恭喜!所有灯泡都亮了!
试题29:家族辈分关系-递归树形结构
【题目描述】
探索家族树:用递归算法查找家族成员关系
小明想了解自己家族中每个人的辈分关系。请设计一个程序,使用递归算法来:
1.构建家族树形结构
2.查找某个人的所有后代
3.计算某个人的辈分等级
4.找出家族中最年长的一代
【题目要求】
- 实现递归函数计算走法数。
- 输出结果。
- 理解递归基线条件和递推关系。
【题目说明】
# 创建家族成员
great_grandpa = FamilyMember("太爷爷")
grandpa = FamilyMember("爷爷")
uncle = FamilyMember("叔叔")
father = FamilyMember("爸爸")
mother = FamilyMember("妈妈")
me = FamilyMember("小明")
brother = FamilyMember("弟弟")
sister = FamilyMember("妹妹")
cousin = FamilyMember("堂兄")
# 建立关系
great_grandpa.add_child(grandpa)
grandpa.add_child(uncle)
grandpa.add_child(father)
uncle.add_child(cousin)
father.add_child(me)
father.add_child(brother)
father.add_child(sister)
【输出示例】
=== 家族辈分关系分析 ===
1. 太爷爷的所有后代: ['爷爷', '叔叔', '堂兄', '爸爸', '小明', '弟弟', '妹妹']
2. 小明的辈分等级: 第3代
2. 爷爷的辈分等级: 第1代
2. 堂兄的辈分等级: 第3代
3. 家族中最年长的是第3代
4. 完整家族结构:
└─ 太爷爷 (第0代)
└─ 爷爷 (第1代)
└─ 叔叔 (第2代)
└─ 堂兄 (第3代)
└─ 爸爸 (第2代)
└─ 小明 (第3代)
└─ 弟弟 (第3代)
└─ 妹妹 (第3代)
试题30:特工任务破解密码锁——回溯算法
【题目描述】
破解密码锁:
你是一个身手敏捷的小特工,发现了一个古老的三位数字密码锁(每个数字从0到9)。锁的密码被忘记了,但你知道一个秘密线索:这个密码的数字之和等于8。
你的任务不是傻傻地从000一直试到999,而是用聪明的办法,快速找出所有可能满足“数字之和为8”的密码组合,然后一一尝试,直到打开它!
【题目要求】
- 使用回溯算法探索所有路径。
- 标记已访问位置,避免重复访问。
- 输出找到的路径或路径总数。
【输出示例】
小特工开始破解密码锁!所有可能密码如下:
找到密码: [0, 0, 8]
找到密码: [0, 1, 7]
找到密码: [0, 2, 6]
找到密码: [0, 3, 5]
找到密码: [0, 4, 4]
找到密码: [0, 5, 3]
找到密码: [0, 6, 2]
找到密码: [0, 7, 1]
找到密码: [0, 8, 0]
找到密码: [1, 0, 7]
找到密码: [1, 1, 6]
找到密码: [1, 2, 5]
找到密码: [1, 3, 4]
找到密码: [1, 4, 3]
找到密码: [1, 5, 2]
找到密码: [1, 6, 1]
找到密码: [1, 7, 0]
找到密码: [2, 0, 6]
找到密码: [2, 1, 5]
找到密码: [2, 2, 4]
找到密码: [2, 3, 3]
找到密码: [2, 4, 2]
找到密码: [2, 5, 1]
找到密码: [2, 6, 0]
找到密码: [3, 0, 5]
找到密码: [3, 1, 4]
找到密码: [3, 2, 3]
找到密码: [3, 3, 2]
找到密码: [3, 4, 1]
找到密码: [3, 5, 0]
找到密码: [4, 0, 4]
找到密码: [4, 1, 3]
找到密码: [4, 2, 2]
找到密码: [4, 3, 1]
找到密码: [4, 4, 0]
找到密码: [5, 0, 3]
找到密码: [5, 1, 2]
找到密码: [5, 2, 1]
找到密码: [5, 3, 0]
找到密码: [6, 0, 2]
找到密码: [6, 1, 1]
找到密码: [6, 2, 0]
找到密码: [7, 0, 1]
找到密码: [7, 1, 0]
找到密码: [8, 0, 0]

