智码云端官网|言若金叶

青少年编程教师认证-题库(专业级)

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

专 业 级 初 级 题 库共12题)❀ 返回最前

试题1:运动会积分榜生成系统

【题目描述】

学校运动会中,两个班级进行多轮比赛,每轮比赛得分累加。请编写一个程序,输入两个班级的当前得分,自动生成积分榜并显示分差柱状图。

题目要求】

  1. 输入两个整数,分别代表一班和二班的当前得分。
  2. 计算两班分差的绝对值。
  3. 输出积分榜,格式如下:
    • 第一行:“最新积分榜:”
    • 第二行:“一班:” + 若干个“★”(数量为一班得分)
    • 第三行:“二班:” + 若干个“☆”(数量为二班得分)
    • 第四行:“分差柱:” + 若干个“|”(数量为分差绝对值)
  4. 程序应使用abs()计算分差,并使用字符串乘法生成柱状图。

输出示例】

一班得分:12  
二班得分:8  

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

试题2:智能收银系统

题目描述】

商店实行促销政策:单笔订单总价超过100元可享9折优惠。请编写一个收银程序,根据输入的书本价格和文具价格计算实付金额,并根据用户支付金额计算找零。

题目要求】

  1. 输入两个浮点数,分别代表书本价格和文具价格。
  2. 计算商品总价,若总价 > 100,则实付金额 = 总价 × 0.9,否则实付金额 = 总价。
  3. 输入用户支付金额(浮点数)。
  4. 输出商品总价、实付金额、支付金额和找零金额,金额保留两位小数。
  5. 使用条件表达式(if-else)实现折扣判断。

【题目说明】

书本价格:50  
文具价格:100
收取金额:200

输出示例】

书本价格:50  
文具价格:100
==================
商品总价:150元
实付金额:135.00元
收取金额:200元
找零:65.00元

试题3:过山车乘坐安全检测系统

【题目描述】

游乐场规定:10岁及以上且身高 ≥ 150cm,或10岁以下且身高 ≥ 140cm 的儿童可乘坐过山车。请编写程序,根据输入的年龄和身高判断是否符合乘坐标准。

【题目要求】

  1. 输入两个整数:年龄(岁)、身高(cm)。
  2. 判断是否符合上述安全标准。
  3. 若符合,输出“符合过山车乘坐标准”;否则输出“安全第一,请选择其他项目”。
  4. 使用逻辑运算符(and、or)组合判断条件。

输出示例】

年龄:12
身高:155

请输入年龄:12  
请输入身高:155

符合过山车乘坐标准

年龄:9
身高:130

请输入年龄:9  
请输入身高:130

安全第一,请选择其它项目。

试题4:交通工具智能推荐系统

题目描述】

根据出行距离和当前天气,智能推荐最适合的交通工具,规则如下:

  • 距离 < 1公里:建议步行
  • 1公里 ≤ 距离 < 3公里:雨天乘公交,否则骑共享单车
  • 3公里 ≤ 距离 < 10公里:晴天乘新能源公交,否则乘室内候车公交
  • 距离 ≥ 10公里:建议乘坐地铁

题目要求】

  1. 输入一个浮点数(距离,单位:公里)和一个字符串(天气,可选“晴”“雨”“雪”)。
  2. 根据上述规则输出推荐交通工具的提示语。
  3. 使用多分支结构(if-elif-else)实现。

输出示例】

请输入目的地距离(公里): 2.5  
当前天气(晴/雨/雪): 雨
雨天路滑,乘公交

请输入目的地距离(公里): 4
当前天气(晴/雨/雪): 晴
乘新能源公交

请输入目的地距离(公里): 12
当前天气(晴/雨/雪): 晴
乘坐地铁

试题5:智能导诊分诊系统

【题目描述】

医院门诊需要根据患者症状和疼痛等级进行智能分诊,规则如下:

  • 若有“发烧”症状且疼痛等级 > 7分 → 急诊优先
  • 若有“呼吸困难”症状 → 呼吸科优先就诊
  • 若有“骨折”症状 → 骨科挂号
  • 其他情况 → 普通内科预检分诊

【题目要求】

  1. 输入一串症状,用逗号分隔(如“发烧,头痛,咳嗽”)。
  2. 输入疼痛等级(1-10整数)。
  3. 根据上述规则输出就诊建议。
  4. 使用split()分割症状字符串,使用in判断症状关键词。

【题目说明】

示例1:
输入:症状(用逗号分隔):发烧,头痛
疼痛等级(1-10):8
输出:急诊优先:发热伴剧烈疼痛

示例2:
输入:症状(用逗号分隔):咳嗽,呼吸困难
疼痛等级(1-10):5
输出:紧急通道:呼吸科优先就诊

示例3:
输入:症状(用逗号分隔):脚踝肿胀
疼痛等级(1-10):6
输出:请到普通内科预检分诊

【输出示例】

症状(用逗号分隔):发烧,头痛  
疼痛等级(1-10):8
急诊优先:发热伴剧烈疼痛

症状(用逗号分隔):咳嗽
疼痛等级(1-10):5
紧急通道:呼吸科优先就诊

症状(用逗号分隔):脚踝肿胀
疼痛等级(1-10):6
请到普通内科预检分诊

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

【题目描述】

输入三角形的三条边长,判断其类型:

  • 非三角形:任意两边之和 ≤ 第三边
  • 等边三角形:三边相等
  • 等腰三角形:至少两边相等
  • 直角三角形:满足勾股定理(a² + b² = c²)
  • 普通三角形:其他情况

【题目要求】

  1. 输入三个浮点数(用空格分隔),代表三边长度。
  2. 对三边进行排序,确保判断逻辑一致。
  3. 根据上述规则输出三角形类型。
  4. 使用sorted()排序和勾股定理判断。

【输出示例】

输入三边长度(空格分隔):3 4 5  
直角三角形(勾股定理成立)

输入三边长度(空格分隔):5 5 5
完美等边三角形

输入三边长度(空格分隔):2 2 2
等腰三角形(两边相等)

输入三边长度(空格分隔):1 2 4
非三角形!两边之和需大于第三边

试题7:月球登陆轨迹模拟器

【题目描述】

你是一名航天工程师,正在模拟月球登陆器的降落过程。飞船初始高度为1000米,受月球重力加速度(1.625 m/s²)影响不断加速下坠。程序需要每秒更新高度与速度数据,并在高度归零时判断着陆结果:若最终速度小于15 m/s则软着陆成功,否则判定为坠毁。

【题目要求】

  1. 使用while循环模拟每秒的高度与速度变化,直到高度≤0
  2. 物理计算规则:
    • 每秒钟速度增加1.625 m/s(月球重力加速度)
    • 每秒钟高度减少当前速度值(即速度=每秒下降距离)
  3. 每秒输出格式:”时间:{time}秒 高度:{height}米 速度:{velocity}m/s”
  4. 高度归零后,判断最终速度:
    • 若velocity < 15,输出”着陆完成!”
    • 否则,输出”着陆失败!”
  5. 所有数值保留1位小数

输出示例】

时间:0秒 高度:1000米 速度:0m/s
时间:1秒 高度:998.4米 速度:1.6m/s
时间:2秒 高度:995.1米 速度:3.2m/s
时间:3秒 高度:990.2米 速度:4.9m/s
时间:4秒 高度:983.8米 速度:6.5m/s
时间:5秒 高度:975.6米 速度:8.1m/s
时间:6秒 高度:965.9米 速度:9.8m/s
时间:7秒 高度:954.5米 速度:11.4m/s
时间:8秒 高度:941.5米 速度:13.0m/s
时间:9秒 高度:926.9米 速度:14.6m/s
时间:10秒 高度:910.6米 速度:16.2m/s
时间:11秒 高度:892.8米 速度:17.9m/s
时间:12秒 高度:873.2米 速度:19.5m/s
时间:13秒 高度:852.1米 速度:21.1m/s
时间:14秒 高度:829.4米 速度:22.8m/s

着陆失败!

试题8:超市收银台模拟器

【题目描述】

模拟超市收银流程:循环输入商品价格,输入“-1”结束。计算总价后应用优惠:

  • 总价满100元减10元
  • 随机生成会员折扣(8~9折)
  • 计算含税金额(税率6%)

【题目要求】

  1. 使用while循环读取价格,直到输入“-1”。
  2. 计算总价后应用上述优惠。
  3. 输出小票明细,包括商品总额、折扣、优惠、税费和应付总额。
  4. 金额保留两位小数。

输出示例】

请输入商品价格(结束输入-1): 45.5  
请输入商品价格(结束输入-1): 60.0  
请输入商品价格(结束输入-1): -1  

商品总额: ¥105.50  
会员折扣: 85% → ¥89.68  
满减优惠: -¥10.00  
税费 (6%): ¥4.78  
应付总额: ¥84.46

试题9:九九乘法表(标准版与三角版)

【题目描述】

编写程序输出两种格式的九九乘法表:

  1. 标准版:完整的9×9乘法表
  2. 三角无重复版:只输出下三角部分(避免重复)

【题目要求】

  1. 使用两层嵌套循环实现。
  2. 标准版每行输出9个算式,三角版每行输出列数 ≤ 行数。
  3. 算式格式为“a×b=c”,c占2位右对齐。
  4. 两种版本之间用空行分隔。

【输出示例】

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

【三角无重复版】
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

试题10:智能库存管理系统

题目描述】

超市商品按类别存储,每类商品包含名称、价格、库存量。请实现以下功能:

  1. 输出库存低于15件的商品及类别
  2. 统计每类商品的总价值和种类数
  3. 查询指定价格区间内的商品

【题目要求】

  1. 使用字典嵌套列表存储商品数据。
  2. 遍历所有商品,输出低库存预警。
  3. 计算每类商品总价值(单价 × 库存量)。
  4. 输入最低价和最高价,输出该区间内所有商品。
  5. 使用两层循环遍历字典和列表。

【题目说明】

products = {
"水果": [["苹果", 5.8, 50], ["香蕉", 3.5, 30]],
"文具": [["笔记本", 10.0, 20], ["铅笔", 2.5, 100]],
"饮品": [["牛奶", 4.5, 15], ["果汁", 6.0, 10]]
}

【输出示例】

低库存商品(<15):
饮品类 - 果汁: 仅剩10件

分类统计:
水果: 2种商品,总价值395.00元
文具: 2种商品,总价值450.00元
饮品: 2种商品,总价值127.50元

价格在3-6元之间的商品:
苹果 - 5.80元
香蕉 - 3.50元
牛奶 - 4.50元
果汁 - 6.00元

试题11:智能班级管理系统

【题目描述】

班主任需要一个功能完善的班级管理系统,用于存储学生的基本信息(学号、姓名、电话)和数学成绩,并提供多维度的查询与统计分析功能。

【题目要求】

  1. 使用嵌套字典存储学生信息,数据结构示例如下:
students = {
"001": {"name": "小明", "phone": "13800138000", "score": 85},
"002": {"name": "小红", "phone": "13900139000", "score": 92},
"003": {"name": "小刚", "phone": "13700137000", "score": 78},
"004": {"name": "小丽", "phone": "13600136000", "score": 90},
"005": {"name": "小强", "phone": "13500135000", "score": 62}
}
  1. 系统需实现以下功能:
    • 按学号查询学生完整信息
    • 按成绩区间筛选学生(输入最低分和最高分)
    • 显示班级成绩统计:平均分、最高分、最低分、各分数段人数
  2. 分数段划分规则:
    • 优秀(≥90分)
    • 良好(80-89分)
    • 中等(70-79分)
    • 及格(60-69分)
    • 不及格(<60分)
  3. 系统应采用菜单式交互界面,循环运行直到用户选择退出

【输出示例】

=== 智能班级管理系统 ===
1. 按学号查询学生信息
2. 按成绩区间筛选学生
3. 显示班级成绩统计
4. 退出系统
请输入选项(1-4): 3
=== 班级成绩统计 ===
平均分: 81.4
最高分: 92 最低分: 62

分数段分布:
优秀(≥90): 2人
良好(80-89): 1人
中等(70-79): 1人
及格(60-69): 1人
不及格(<60): 0人

=== 智能班级管理系统 ===
1. 按学号查询学生信息
2. 按成绩区间筛选学生
3. 显示班级成绩统计
4. 退出系统
请输入选项(1-4): 4
感谢使用班级管理系统,再见!

试题12:素数检测与输出系统

【题目描述】

编写一个函数,接收起始值和结束值,输出该范围内的所有素数,并统计个数。

【题目要求】

  1. 定义辅助函数is_prime(num),判断是否为素数(只需检查到√num)。
  2. 主函数print_primes_in_range(start, end)遍历区间并调用判断函数。
  3. 输出所有素数,每行最多5个,最后输出总数。
  4. 素数定义:大于1,且只能被1和自身整除。

【输出示例】

10到30之间的素数有:
11 13 17 19 23
29
共找到6个素数

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

试题1:玩具积木塔搭建

【题目描述

玩具积木塔可以用栈来模拟,每次只能从塔顶添加或拿走积木,体现了后进先出的特性。请实现一个程序,模拟以下操作:

  1. 初始化一个空积木塔(空栈)。
  2. 依次往塔顶添加积木:红色积木、蓝色积木、绿色积木。
  3. 查看当前塔顶积木。
  4. 从塔顶拿走一块积木(并输出拿走的积木)。
  5. 再拿走一块积木。
  6. 尝试从空塔拿走积木时,进行错误处理。

【题目要求】

编写程序,按照上述顺序执行操作,并输出每一步的结果。要求使用列表模拟栈,利用append()实现压栈,pop()实现弹栈,并正确处理空栈情况。输出格式请严格参照示例。

【输出示例】

初始积木塔: []
添加三块积木后: ['红色积木', '蓝色积木', '绿色积木']
当前塔顶积木: 绿色积木
拿走了: 绿色积木, 剩余积木: ['红色积木', '蓝色积木']
又拿走了: 蓝色积木, 剩余积木: ['红色积木']
积木塔已经空了,不能再拿了!

试题2:智能家居设备响应优先级

题目描述

设计一个智能家居任务管理系统,每个设备任务包含设备描述和优先级(数值越小优先级越高)。系统需要支持添加任务、执行最高优先级任务、动态调整任务优先级。请使用优先队列(最小堆)实现。

初始任务如下:

  • 添加任务:”空调: 调节至26℃”,优先级2
  • 添加任务:”灯光: 切换温馨模式”,优先级3
  • 添加任务:”音箱: 播放晨间音乐”,优先级1
  • 添加任务:”窗帘: 打开50%”,优先级4

随后依次执行:

  1. 显示当前任务队列(按优先级排序)。
  2. 执行两个最高优先级任务。
  3. 将“灯光: 切换温馨模式”的优先级调整为0。
  4. 继续执行所有剩余任务,直到队列为空。

题目要求

实现一个SmartHomeSystem类,包含添加任务、执行任务、调整优先级、显示任务队列等方法。按照上述操作顺序输出每一步的结果。输出格式参照示例。

输出示例

添加任务: 空调: 调节至26℃ (优先级:2)
添加任务: 灯光: 切换温馨模式 (优先级:3)
添加任务: 音箱: 播放晨间音乐 (优先级:1)
添加任务: 窗帘: 打开50% (优先级:4)
当前任务队列(按优先级排序):
 - 音箱: 播放晨间音乐 (优先级:1)
 - 空调: 调节至26℃ (优先级:2)
 - 灯光: 切换温馨模式 (优先级:3)
 - 窗帘: 打开50% (优先级:4)
执行任务:
执行任务: 音箱: 播放晨间音乐 (优先级:1)
执行任务: 空调: 调节至26℃ (优先级:2)
调整优先级:
调整任务优先级: 灯光: 切换温馨模式 → 0
执行调整后的任务:
执行任务: 灯光: 切换温馨模式 (优先级:0)
执行任务: 窗帘: 打开50% (优先级:4)
最终任务队列:
当前没有待执行任务

试题3:校园家族树

题目描述

构建一个校园家族树,模拟学校成员之间的层级关系。校长为根节点,下面有老师,老师下面有学生。每个成员有姓名和角色。要求实现以下功能:

  1. 初始化校长“张校长”。
  2. 添加数学老师“李老师”和英语老师“王老师”作为校长的子节点。
  3. 为数学老师添加学生“小明”、“小红”;为英语老师添加学生“小刚”。
  4. 显示完整的家族树结构(带缩进)。
  5. 查找成员“小红”并输出其信息。
  6. 统计校园总人数。
  7. 从数学老师处移除学生“小明”,并再次显示树结构及总人数。

题目要求

定义CampusMember类,包含姓名、角色和子节点列表。实现添加子节点、移除子节点、查找成员、显示树(递归)、统计人数等方法。按照上述步骤执行并输出结果。输出格式参照示例。

输出示例

校长 张校长 新增数学老师: 李老师
校长 张校长 新增英语老师: 王老师
数学老师 李老师 新增学生: 小明
数学老师 李老师 新增学生: 小红
英语老师 王老师 新增学生: 小刚

校园家族树结构:
校长 张校长
  数学老师 李老师
    学生 小明
    学生 小红
  英语老师 王老师
    学生 小刚

查找测试:
找到成员: 学生 小红

校园总人数: 6人

移除测试:
已移除 小明

更新后的家族树:
校长 张校长
  数学老师 李老师
    学生 小红
  英语老师 王老师
    学生 小刚
更新后总人数: 5人

试题4:超市购物清单

题目描述

设计一个超市购物清单管理系统,使用集合存储商品,自动去重。实现以下功能:

  1. 创建两个购物清单:妈妈的清单和爸爸的清单。
  2. 妈妈添加商品:牛奶、鸡蛋、面包、苹果、鸡蛋、香蕉。
  3. 爸爸添加商品:啤酒、薯片、鸡蛋、牛排、苹果。
  4. 检查牛奶是否在妈妈的清单中,以及是否在爸爸的清单中。
  5. 求两个清单的交集(全家都需要买的商品)和差集(只需要妈妈买的商品)。
  6. 将爸爸的清单合并到妈妈的清单中,并显示合并后的清单。
  7. 从合并后的清单中移除“鸡蛋”,再尝试移除不存在的“冰淇淋”,并显示最终清单。

题目要求

实现ShoppingList类,封装集合操作:添加、删除、检查、并集、交集、差集。按照上述操作顺序输出每一步的结果。输出格式参照示例。

输出示例

妈妈在添加商品:
已添加: 牛奶
已添加: 鸡蛋
已添加: 面包
已添加: 苹果
已添加: 鸡蛋
已添加: 香蕉

爸爸在添加商品:
已添加: 啤酒
已添加: 薯片
已添加: 鸡蛋
已添加: 牛排
已添加: 苹果

检查商品:
牛奶在妈妈的清单中吗? True
牛奶在爸爸的清单中吗? False

集合运算结果:
全家都需要买的商品(交集): {'苹果', '鸡蛋'}
只需要妈妈买的商品(差集): {'牛奶', '面包', '香蕉'}

合并购物清单:
购物清单已合并
当前购物清单:
1. 啤酒
2. 牛奶
3. 牛排
4. 苹果
5. 薯片
6. 面包
7. 香蕉
8. 鸡蛋

尝试移除商品:
已移除: 鸡蛋
无法移除: 冰淇淋 不在清单中
当前购物清单:
1. 啤酒
2. 牛奶
3. 牛排
4. 苹果
5. 薯片
6. 面包
7. 香蕉

试题5:植物生长记录表

题目描述

使用namedtuple定义植物记录,包含名称、种植日期、高度、叶片数、光照时间、浇水量。创建初始记录:

  • 葵花:2026-05-01,45cm,8叶,6小时,300ml
  • 番茄:2026-05-10,32cm,12叶,5小时,250ml
  • 薄荷:2026-04-25,15cm,24叶,4小时,200ml

要求实现以下功能:

  1. 显示所有植物记录。
  2. 将番茄的高度更新为38cm,并再次显示。
  3. 找出最高的植物并输出。
  4. 添加新植物“玫瑰”:2026-05-05,28cm,6叶,5小时,180ml,并显示所有记录。

题目要求

使用collections.namedtuple定义植物记录。实现显示、更新高度、找最高植物、添加植物的函数。按照上述步骤输出结果。输出格式参照示例。

输出示例

我的植物生长记录表
名称  种植日期              高度   叶片数  光照  水量
葵花  2026-05-01           45      8        6     300
番茄  2026-05-10           32      12       5     250
薄荷  2026-04-25           15      24       4     200

番茄 的高度已更新为 38cm

我的植物生长记录表
名称  种植日期              高度   叶片数  光照  水量
葵花  2026-05-01           45      8        6     300
番茄  2026-05-10           38      12       5     250
薄荷  2026-04-25           15      24       4     200

最高的植物是: 葵花 (45cm)

我的植物生长记录表
名称  种植日期              高度   叶片数  光照  水量
葵花  2026-05-01           45      8        6     300
番茄  2026-05-10           38      12       5     250
薄荷  2026-04-25           15      24       4     200
玫瑰  2026-05-05           28      6        5     180

试题6:电子宠物社交系统

题目描述

构建一个电子宠物社交网络,每个宠物有ID、名称和种类,宠物之间可以建立双向友谊关系。使用图(邻接表)表示网络。初始宠物:

  • p1: 豆豆 (电子狗)
  • p2: 毛毛 (电子猫)
  • p3: 花花 (电子兔)
  • p4: 球球 (电子仓鼠)
  • p5: 闪电 (电子狐狸)
  • p6: 泡泡 (电子鱼)

建立以下友谊关系(双向):
p1-p2, p1-p3, p2-p4, p3-p4, p3-p5, p4-p6

要求:

  1. 输出豆豆的直接朋友。
  2. 从豆豆开始进行广度优先遍历,输出遍历顺序。
  3. 找出豆豆到泡泡的最短友谊链。
  4. 找出最受欢迎的宠物(朋友最多)。
  5. 为豆豆推荐可能认识的朋友(朋友的朋友,不包括已直接认识)。

题目要求

实现PetSocialNetwork类,包含添加宠物、添加友谊、获取朋友、BFS遍历、最短路径、最受欢迎宠物、朋友推荐等方法。按照上述步骤输出结果。输出格式参照示例。

输出示例

豆豆的直接朋友: ['花花', '毛毛']
从豆豆出发的BFS遍历顺序: ['豆豆', '毛毛', '花花', '球球', '闪电', '泡泡']
豆豆到泡泡的最短友谊链: ['豆豆', '毛毛', '球球', '泡泡']
最受欢迎的宠物: 花花 (3个朋友)
给豆豆的朋友推荐: ['球球', '闪电']

试题7:图书馆找书系统

题目描述

图书馆的书籍已经按书名拼音顺序排好,现给出一个有序的书名列表,要求用二分查找算法快速找到目标书的位置。书列表如下:

["ATSTH安徒生童话", "BKQS百科全书", "HLBT哈利波特", "HLM红楼梦",
 "JYQJ金庸全集", "ST体", "SW十万个为什么", "XYJ西游记",
 "XWZ小王子", "ZGLS中国历史"]

查找目标书“HLBT哈利波特”。要求输出每次检查的中间书名,并给出最终位置。

题目要求

实现二分查找函数,输入有序列表和目标值,返回索引(从0开始)。在查找过程中,输出每次比较的中间书名。如果找到,输出位置(书架位置从1开始计数);否则输出未找到。输出格式参照示例。

输出示例

开始在图书馆查找:《HLBT哈利波特》
正在检查:《JYQJ金庸全集》
正在检查:《BKQS百科全书》
正在检查:《HLBT哈利波特》
找到了!《HLBT哈利波特》在第3个书架位置

试题8:超市商品价格排行榜

题目描述

某超市有10种商品,每种商品有名称和价格(元)。初始数据如下:

[{"name": "可乐", "price": 3},
 {"name": "薯片", "price": 5},
 {"name": "矿泉水A", "price": 2},
 {"name": "矿泉水B", "price": 2},
 {"name": "牛奶", "price": 6},
 {"name": "巧克力", "price": 10},
 {"name": "饼干", "price": 4},
 {"name": "口香糖", "price": 3},
 {"name": "方便面", "price": 5},
 {"name": "果汁", "price": 8}]

请使用选择排序按价格从低到高排序,并输出每一轮排序后的结果(只需输出关键轮次或最终结果,但需体现过程)。最后验证排序的稳定性:观察矿泉水A和矿泉水B的相对顺序是否改变。

题目要求

实现选择排序算法,要求输出每一轮排序后的商品列表(至少输出第一轮和最终结果),并验证相同价格商品的相对顺序。输出格式参照示例。

输出示例

===== 商品原始价格 =====
可乐: ¥3
薯片: ¥5
矿泉水A: ¥2
矿泉水B: ¥2
牛奶: ¥6
巧克力: ¥10
饼干: ¥4
口香糖: ¥3
方便面: ¥5
果汁: ¥8

第1轮排序结果:
矿泉水A: ¥2
薯片: ¥5
可乐: ¥3
矿泉水B: ¥2
牛奶: ¥6
巧克力: ¥10
饼干: ¥4
口香糖: ¥3
方便面: ¥5
果汁: ¥8
本轮选择:矿泉水A ¥2
...(中间轮次省略)
===== 排序后价格排行榜 =====
1. 矿泉水A: ¥2
2. 矿泉水B: ¥2
3. 可乐: ¥3
4. 口香糖: ¥3
5. 饼干: ¥4
6. 薯片: ¥5
7. 方便面: ¥5
8. 牛奶: ¥6
9. 果汁: ¥8
10. 巧克力: ¥10
===== 不稳定排序验证 =====
原始顺序中矿泉水A在矿泉水B前面
排序后顺序: 矿泉水A 矿泉水B

试题9:运动会成绩排名

题目描述

学校运动会100米短跑成绩如下(姓名,秒数):

[{'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}]

请使用快速排序按成绩从快到慢(秒数从小到大)排序,并输出最终排名结果。

题目要求

实现快速排序算法,要求输出排序后的运动员列表(从第1名到第7名)。输出格式参照示例。

输出示例

原始成绩列表:
张小明: 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秒

试题10:图书借阅排行榜

题目描述

图书馆有6本图书,每本有名称和借阅次数。数据如下:

[{'name': 'Python编程入门', 'count': 45},
 {'name': '科学小实验', 'count': 78},
 {'name': '动物世界', 'count': 32},
 {'name': '童话故事集', 'count': 91},
 {'name': '数学趣味题', 'count': 56},
 {'name': '历史大发现', 'count': 23}]

请使用堆排序(利用heapq模块)按借阅次数从高到低排序,输出排行榜。

题目要求

实现堆排序函数,输出排序后的图书列表。输出格式参照示例。

输出示例

原始图书借阅数据:
Python编程入门: 借阅45次
科学小实验: 借阅78次
动物世界: 借阅32次
童话故事集: 借阅91次
数学趣味题: 借阅56次
历史大发现: 借阅23次

热门图书排行榜(从高到低):
第1名: 童话故事集, 借阅91次
第2名: 科学小实验, 借阅78次
第3名: 数学趣味题, 借阅56次
第4名: Python编程入门, 借阅45次
第5名: 动物世界, 借阅32次
第6名: 历史大发现, 借阅23次

试题11:乐高零件按形状分类

题目描述

有10个乐高零件,每个零件有编号、形状类型、颜色、尺寸。要求先按形状类型分组,然后在每组内按颜色字母顺序排序,颜色相同的按尺寸从大到小排序(尺寸顺序:大>中>小)。零件数据如下:

[{'id': '3020', 'type': '砖块', 'color': '红', 'size': '小'},
 {'id': '3021', 'type': '砖块', 'color': '蓝', 'size': '中'},
 {'id': '3022', 'type': '平板', 'color': '黄', 'size': '大'},
 {'id': '3023', 'type': '斜面', 'color': '红', 'size': '中'},
 {'id': '3024', 'type': '砖块', 'color': '黄', 'size': '大'},
 {'id': '3025', 'type': '特殊件', 'color': '蓝', 'size': '小'},
 {'id': '3026', 'type': '平板', 'color': '红', 'size': '小'},
 {'id': '3027', 'type': '斜面', 'color': '绿', 'size': '大'},
 {'id': '3028', 'type': '砖块', 'color': '红', 'size': '大'},
 {'id': '3029', 'type': '特殊件', 'color': '黄', 'size': '中'}]

请使用itertools.groupby实现分组,并按要求排序,输出每个形状类下的零件列表,以及每个类的颜色统计。

题目要求

实现分组排序功能,输出分组后的零件列表和颜色统计。输出格式参照示例。

输出示例

=== 原始零件列表 ===
编号:3020 类型:砖块 颜色:红 尺寸:小
编号:3021 类型:砖块 颜色:蓝 尺寸:中
编号:3022 类型:平板 颜色:黄 尺寸:大
编号:3023 类型:斜面 颜色:红 尺寸:中
编号:3024 类型:砖块 颜色:黄 尺寸:大
编号:3025 类型:特殊件 颜色:蓝 尺寸:小
编号:3026 类型:平板 颜色:红 尺寸:小
编号:3027 类型:斜面 颜色:绿 尺寸:大
编号:3028 类型:砖块 颜色:红 尺寸:大
编号:3029 类型:特殊件 颜色:黄 尺寸:中

=== 分组排序后的零件 ===

【平板】类零件:
  编号:3026 颜色:红 尺寸:小
  编号:3022 颜色:黄 尺寸:大

【斜面】类零件:
  编号:3023 颜色:红 尺寸:中
  编号:3027 颜色:绿 尺寸:大

【特殊件】类零件:
  编号:3025 颜色:蓝 尺寸:小
  编号:3029 颜色:黄 尺寸:中

【砖块】类零件:
  编号:3028 颜色:红 尺寸:大
  编号:3020 颜色:红 尺寸:小
  编号:3021 颜色:蓝 尺寸:中
  编号:3024 颜色:黄 尺寸:大

=== 每类零件的颜色统计 ===

【平板】类颜色分布:
  红色: 1个
  黄色: 1个

【斜面】类颜色分布:
  红色: 1个
  绿色: 1个

【特殊件】类颜色分布:
  蓝色: 1个
  黄色: 1个

【砖块】类颜色分布:
  红色: 2个
  蓝色: 1个
  黄色: 1个

试题12:电子贺卡按发送时间排序

题目描述

小明收到多张电子贺卡,每张贺卡有发送时间(字符串格式)和祝福内容。要求按发送时间从早到晚排序。贺卡数据如下:

("2028-12-31 23:59:58", "新年快乐!")
("2028-12-31 23:59:59", "Happy New Year!")
("2028-12-31 23:50:00", "祝你新的一年万事如意!")
("2029-01-01 00:00:01", "新年好!")
("2029-01-01 00:00:00", "元旦快乐!")

请编写程序,使用time模块将时间字符串转换为时间戳,然后按时间戳排序,输出排序后的贺卡列表。

题目要求

实现排序函数,输出排序后的结果。输出格式参照示例。

输出示例

=== 原始贺卡数据 ===
2028-12-31 23:59:58 -> 新年快乐!
2028-12-31 23:59:59 -> Happy New Year!
2028-12-31 23:50:00 -> 祝你新的一年万事如意!
2029-01-01 00:00:01 -> 新年好!
2029-01-01 00:00:00 -> 元旦快乐!

=== 按时间排序后 ===
2028-12-31 23:50:00 -> 祝你新的一年万事如意!
2028-12-31 23:59:58 -> 新年快乐!
2028-12-31 23:59:59 -> Happy New Year!
2029-01-01 00:00:00 -> 元旦快乐!
2029-01-01 00:00:01 -> 新年好!

试题13:家族辈分图

题目描述

构建一个家族辈分有向图,每个成员有姓名和辈分数字(数字越小辈分越高)。关系为有向边从长辈指向晚辈。初始成员:

  • 高祖(1), 曾祖(2), 祖父(3), 父亲(4), 本人(5), 儿子(6), 孙子(7)
    关系:
    高祖→曾祖, 曾祖→祖父, 祖父→父亲, 父亲→本人, 本人→儿子, 儿子→孙子

要求:

  1. 以树形结构打印家族关系。
  2. 输出邻接表表示(有向图)。
  3. 查询本人的所有祖先。
  4. 查询祖父的所有后代。
  5. 查找本人和孙子的最近共同祖先。
  6. 查询第3辈的所有成员。

题目要求

实现FamilyTree类,包含添加成员、添加关系、获取祖先、获取后代、最近共同祖先、按辈分查询等方法。按照上述步骤输出结果。输出格式参照示例。

输出示例

添加成员: 高祖(1辈)
添加成员: 曾祖(2辈)
添加成员: 祖父(3辈)
添加成员: 父亲(4辈)
添加成员: 本人(5辈)
添加成员: 儿子(6辈)
添加成员: 孙子(7辈)
添加关系: 高祖 → 曾祖
添加关系: 曾祖 → 祖父
添加关系: 祖父 → 父亲
添加关系: 父亲 → 本人
添加关系: 本人 → 儿子
添加关系: 儿子 → 孙子

家族辈分图(有向树结构):
└── 高祖(1辈)
    └── 曾祖(2辈)
        └── 祖父(3辈)
            └── 父亲(4辈)
                └── 本人(5辈)
                    └── 儿子(6辈)
                        └── 孙子(7辈)

家族关系邻接表(有向图):
高祖 → ['曾祖']
曾祖 → ['祖父']
祖父 → ['父亲']
父亲 → ['本人']
本人 → ['儿子']
儿子 → ['孙子']

--- 辈分关系查询 ---
本人的所有祖先: ['父亲(4辈)', '祖父(3辈)', '曾祖(2辈)', '高祖(1辈)']
本人的直接父辈: ['父亲(4辈)']
祖父的所有后代: ['父亲(4辈)', '本人(5辈)', '儿子(6辈)', '孙子(7辈)']
祖父的直接后代: ['父亲(4辈)']
本人和孙子的最近共同祖先: 父亲(4辈)
第3辈的所有成员: ['祖父(3辈)']

试题14:古诗词接龙网络

题目描述

给定一个古诗库(诗句列表),诗句之间如果前一句的最后一个字和后一句的第一个字相同,则可以形成接龙。将诗句视为节点,接龙关系视为有向边,构建有向图。使用深度优先搜索(DFS)找出从指定诗句开始的最长接龙序列。古诗库如下(索引从0开始):
0: 床前明月光
1: 光阴似箭
2: 箭在弦上
3: 上天入地
4: 地久天长
5: 长夜漫漫
6: 漫卷诗书
7: 书山有路
8: 路不拾遗
9: 遗世独立

要求:

  1. 输出接龙关系图(邻接表,只显示有出边的节点)。
  2. 从诗句0(床前明月光)开始,找出最长接龙序列,输出诗句文本和接龙关系。
  3. 从诗句3(上天入地)开始,找出最长接龙序列。

题目要求

实现PoetryChain类,构建有向图,使用DFS递归查找最长路径,避免环路。输出结果。输出格式参照示例。

输出示例

古诗库:
0: 床前明月光
1: 光阴似箭
2: 箭在弦上
3: 上天入地
4: 地久天长
5: 长夜漫漫
6: 漫卷诗书
7: 书山有路
8: 路不拾遗
9: 遗世独立

接龙关系图(邻接表):
0('光') -> ['1(光)']
1('箭') -> ['2(箭)']
2('上') -> ['3(上)']
3('地') -> ['4(地)']
4('长') -> ['5(长)']
5('漫') -> ['6(漫)']
6('书') -> ['7(书)']
7('路') -> ['8(路)']
8('遗') -> ['9(遗)']

=== 从『床前明月光』开始的最长接龙 ===
接龙长度: 10
接龙序列:
1. 床前明月光
2. 光阴似箭
3. 箭在弦上
4. 上天入地
5. 地久天长
6. 长夜漫漫
7. 漫卷诗书
8. 书山有路
9. 路不拾遗
10. 遗世独立
接龙关系: 光→光 箭→箭 上→上 地→地 长→长 漫→漫 书→书 路→路 遗→遗

=== 从『上天入地』开始的最长接龙 ===
接龙长度: 7
接龙序列:
1. 上天入地
2. 地久天长
3. 长夜漫漫
4. 漫卷诗书
5. 书山有路
6. 路不拾遗
7. 遗世独立
接龙关系: 地→地 长→长 漫→漫 书→书 路→路 遗→遗

试题15:都江堰智慧灌溉

题目描述

给定一个灌溉区域网格,包含水源点(W)、需灌溉耕地(.)和障碍物(#)。水从所有水源点同时向上下左右四个方向流动,每单位时间流动一格,且不能穿过障碍物。请计算:

  1. 最少需要多少水源点才能覆盖全部耕地?现有水源点为 (1,1)、(3,3)、(5,4)(坐标从0开始),判断是否能覆盖全部区域。
  2. 从现有水源点出发,水覆盖整个区域所需的最少时间(即最远耕地被覆盖的时间)。

灌溉区域网格如下(6行6列):

. . . # . .
. W . # . .
. . . . . #
# # . W . .
. . . . . .
. . # . W .

(其中 W 表示水源,. 表示耕地,# 表示障碍)

题目要求

编写程序,使用多源BFS模拟水流扩散。第一问要求判断现有水源能否覆盖全部耕地(若能则输出时间,否则输出-1)。第二问输出覆盖全区域所需时间。输出格式参照示例。

输出示例

灌溉区域地图:
. . . # . .
. W . # . .
. . . . . #
# # . W . .
. . . . . .
. . # . W .

最少需要的水源点数量: 1
从现有水源点覆盖全区域所需时间: 5 单位时间
BFS层次遍历模拟水流扩散:
第0层: (0,0)
第1层: (1,0) (0,1)
第2层: (2,0) (0,2)
第3层: (2,1) (1,2)
第4层: (2,2)

试题16:古驿道物资运输

题目描述

给定古代驿道网络(加权无向图),要求从长安运送物资到广州,必须经过襄阳和荆州这两个重要驿站,同时需要避开洛阳到开封的路段(因山路险峻)。驿道网络用邻接表表示(节点为驿站名,边为距离)。网络数据如下:

长安: {'洛阳': 300, '潼关': 120}
洛阳: {'长安': 300, '开封': 200, '南阳': 180}
潼关: {'长安': 120, '南阳': 220, '襄阳': 280}
南阳: {'洛阳': 180, '潼关': 220, '襄阳': 150, '荆州': 240}
开封: {'洛阳': 200, '徐州': 280}
襄阳: {'潼关': 280, '南阳': 150, '荆州': 100, '武昌': 200}
荆州: {'南阳': 240, '襄阳': 100, '武昌': 180, '长沙': 300}
徐州: {'开封': 280, '南京': 250}
武昌: {'襄阳': 200, '荆州': 180, '长沙': 220, '南京': 400}
南京: {'徐州': 250, '武昌': 400, '杭州': 180}
长沙: {'荆州': 300, '武昌': 220, '广州': 600}
杭州: {'南京': 180, '福州': 300}
福州: {'杭州': 300, '广州': 500}
广州: {'长沙': 600, '福州': 500}

历史运输数据记录了某些路径的成功次数(可作为权重辅助优化)。现要求:

  1. 计算不考虑必经点时的基础最短路径及距离。
  2. 找出所有满足必经点约束且避开禁用路段的路径,并按距离排序,输出前几条(如全部或前5条)。
  3. 结合历史数据(路径成功次数),综合距离和历史成功率选择最优路径(可自定义评分公式,例如 score = 距离*0.7 + 历史成功率*0.3)。

历史运输数据如下(路径用元组表示,值为成功次数):

('长安','潼关','南阳','襄阳','荆州','武昌','广州'): 15
('长安','洛阳','南阳','荆州','长沙','广州'): 12
('长安','洛阳','开封','徐州','南京','杭州','福州','广州'): 8
('长安','潼关','襄阳','荆州','长沙','广州'): 20

题目要求

实现ConstrainedShortestPath类,包含基础Dijkstra、带约束的路径搜索、历史数据优化等方法。按照上述要求输出结果。输出格式参照示例(可适当简化,但需体现关键信息)。

输出示例

基于历史数据的古驿道物资运输路径优化
==================================================
=== 古驿道物资运输路径优化 ===
起点: 长安, 终点: 广州
必经驿站: ['襄阳', '荆州']
避开路段: [('洛阳', '开封')]

1. 基础最短路径: 长安 → 潼关 → 襄阳 → 荆州 → 长沙 → 广州
距离: 1400里

2. 所有满足约束的路径(共29条):
路径1: 长安 → 潼关 → 襄阳 → 荆州 → 长沙 → 广州
距离: 1400里, 历史成功率: 20次
路径2: 长安 → 潼关 → 南阳 → 襄阳 → 荆州 → 长沙 → 广州
距离: 1490里, 历史成功率: 0次
路径3: 长安 → 潼关 → 襄阳 → 荆州 → 武昌 → 长沙 → 广州
距离: 1500里, 历史成功率: 0次
路径4: 长安 → 潼关 → 南阳 → 襄阳 → 荆州 → 武昌 → 长沙 → 广州
距离: 1590里, 历史成功率: 0次
路径5: 长安 → 洛阳 → 南阳 → 襄阳 → 荆州 → 长沙 → 广州
距离: 1630里, 历史成功率: 0次
路径6: 长安 → 潼关 → 襄阳 → 武昌 → 荆州 → 长沙 → 广州
距离: 1680里, 历史成功率: 0次
路径7: 长安 → 潼关 → 襄阳 → 南阳 → 荆州 → 长沙 → 广州
距离: 1690里, 历史成功率: 0次
路径8: 长安 → 潼关 → 南阳 → 荆州 → 襄阳 → 武昌 → 长沙 → 广州
距离: 1700里, 历史成功率: 0次
路径9: 长安 → 洛阳 → 南阳 → 襄阳 → 荆州 → 武昌 → 长沙 → 广州
距离: 1730里, 历史成功率: 0次
路径10: 长安 → 潼关 → 南阳 → 襄阳 → 武昌 → 荆州 → 长沙 → 广州
距离: 1770里, 历史成功率: 0次
路径11: 长安 → 潼关 → 襄阳 → 南阳 → 荆州 → 武昌 → 长沙 → 广州
距离: 1790里, 历史成功率: 0次
路径12: 长安 → 洛阳 → 南阳 → 荆州 → 襄阳 → 武昌 → 长沙 → 广州
距离: 1840里, 历史成功率: 0次
路径13: 长安 → 洛阳 → 南阳 → 襄阳 → 武昌 → 荆州 → 长沙 → 广州
距离: 1910里, 历史成功率: 0次
路径14: 长安 → 洛阳 → 南阳 → 潼关 → 襄阳 → 荆州 → 长沙 → 广州
距离: 1980里, 历史成功率: 0次
路径15: 长安 → 潼关 → 襄阳 → 荆州 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2060里, 历史成功率: 0次
路径16: 长安 → 洛阳 → 南阳 → 潼关 → 襄阳 → 荆州 → 武昌 → 长沙 → 广州
距离: 2080里, 历史成功率: 0次
路径17: 长安 → 潼关 → 南阳 → 襄阳 → 荆州 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2150里, 历史成功率: 0次
路径18: 长安 → 洛阳 → 南阳 → 潼关 → 襄阳 → 武昌 → 荆州 → 长沙 → 广州
距离: 2260里, 历史成功率: 0次
路径19: 长安 → 潼关 → 南阳 → 荆州 → 襄阳 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2260里, 历史成功率: 0次
路径20: 长安 → 洛阳 → 南阳 → 襄阳 → 荆州 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2290里, 历史成功率: 0次
路径21: 长安 → 潼关 → 襄阳 → 南阳 → 荆州 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2350里, 历史成功率: 0次
路径22: 长安 → 洛阳 → 南阳 → 荆州 → 襄阳 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2400里, 历史成功率: 0次
路径23: 长安 → 潼关 → 襄阳 → 荆州 → 长沙 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2400里, 历史成功率: 0次
路径24: 长安 → 潼关 → 南阳 → 襄阳 → 荆州 → 长沙 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2490里, 历史成功率: 0次
路径25: 长安 → 洛阳 → 南阳 → 襄阳 → 荆州 → 长沙 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2630里, 历史成功率: 0次
路径26: 长安 → 洛阳 → 南阳 → 潼关 → 襄阳 → 荆州 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2640里, 历史成功率: 0次
路径27: 长安 → 潼关 → 襄阳 → 南阳 → 荆州 → 长沙 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2690里, 历史成功率: 0次
路径28: 长安 → 洛阳 → 南阳 → 潼关 → 襄阳 → 荆州 → 长沙 → 武昌 → 南京 → 杭州 → 福州 → 广州
距离: 2980里, 历史成功率: 0次
路径29: 长安 → 潼关 → 襄阳 → 武昌 → 南京 → 徐州 → 开封 → 洛阳 → 南阳 → 荆州 → 长沙 → 广州
距离: 3050里, 历史成功率: 0次

3. 综合最优路径: 长安 → 潼关 → 襄阳 → 荆州 → 长沙 → 广州
最终距离: 1400里

驿道网络概况:
长安: 可通往 洛阳, 潼关
洛阳: 可通往 长安, 开封, 南阳
潼关: 可通往 长安, 南阳, 襄阳
南阳: 可通往 洛阳, 潼关, 襄阳, 荆州
开封: 可通往 洛阳, 徐州
襄阳: 可通往 潼关, 南阳, 荆州, 武昌
荆州: 可通往 南阳, 襄阳, 武昌, 长沙
徐州: 可通往 开封, 南京
武昌: 可通往 襄阳, 荆州, 长沙, 南京
南京: 可通往 徐州, 武昌, 杭州
长沙: 可通往 荆州, 武昌, 广州
杭州: 可通往 南京, 福州
福州: 可通往 杭州, 广州
广州: 可通往 长沙, 福州

试题17:传统建筑榫卯结构稳定性

题目描述

传统木结构建筑有7个木构件(编号0-6),它们之间可以通过榫卯连接。每个可能的连接有一个稳定性权重(权重越小越稳定)。所有可能的连接及权重如下:

(0,1,2), (0,3,1), (0,4,4), (1,2,3), (1,4,2), (1,5,5), (2,5,2), (2,6,3), (3,4,1), (3,6,4), (4,5,3), (5,6,2)

要求设计一个最小支撑网络,用最少的榫卯连接所有构件,且总稳定性最佳(权重和最小)。请使用Kruskal算法求解,并输出所选连接及总稳定性评分。同时,分析哪些连接是冗余的(即不在最小生成树中的连接)。

题目要求

实现UnionFind并查集和Kruskal算法。输出最小生成树的边列表、总稳定性评分,以及被消除的冗余连接列表。输出格式参照示例。

输出示例

传统建筑榫卯结构最小支撑网络设计
==================================================
木构件编号:0-柱A, 1-柱B, 2-柱C, 3-梁D, 4-梁E, 5-梁F, 6-枋G

所有可能的榫卯连接及稳定性权重(权重越小越稳定):
连接1: 构件0-构件1, 稳定性权重: 2
连接2: 构件0-构件3, 稳定性权重: 1
连接3: 构件0-构件4, 稳定性权重: 4
连接4: 构件1-构件2, 稳定性权重: 3
连接5: 构件1-构件4, 稳定性权重: 2
连接6: 构件1-构件5, 稳定性权重: 5
连接7: 构件2-构件5, 稳定性权重: 2
连接8: 构件2-构件6, 稳定性权重: 3
连接9: 构件3-构件4, 稳定性权重: 1
连接10: 构件3-构件6, 稳定性权重: 4
连接11: 构件4-构件5, 稳定性权重: 3
连接12: 构件5-构件6, 稳定性权重: 2

最小支撑网络(消除冗余连接,使用6个榫卯):
榫卯1: 构件0-构件3, 稳定性权重: 1
榫卯2: 构件3-构件4, 稳定性权重: 1
榫卯3: 构件0-构件1, 稳定性权重: 2
榫卯4: 构件2-构件5, 稳定性权重: 2
榫卯5: 构件5-构件6, 稳定性权重: 2
榫卯6: 构件1-构件2, 稳定性权重: 3
总稳定性评分: 11(越小越稳定)

被消除的冗余连接(6个):
冗余连接: 构件1-构件4, 稳定性权重: 2
冗余连接: 构件2-构件6, 稳定性权重: 3
冗余连接: 构件4-构件5, 稳定性权重: 3
冗余连接: 构件0-构件4, 稳定性权重: 4
冗余连接: 构件3-构件6, 稳定性权重: 4
冗余连接: 构件1-构件5, 稳定性权重: 5

连通性验证: 所有1个木构件通过6个榫卯连接形成一个整体

试题18:二十四节气农事活动链

题目描述

根据二十四节气,农事活动有严格的先后依赖关系。现有10项农事活动(编号1-10)及其描述:
1: 松土保墒(立春时节,土壤解冻,进行松土保墒工作)
2: 送粪积肥(准备春耕所需的肥料)
3: 春耕春播(开始春季耕作和播种)
4: 选种准备(雨水时节选种,为播种做准备)
5: 小麦追肥(惊蛰时节给小麦追肥)
6: 播种作业(进行大规模播种)
7: 农田灌溉(春分后开始灌溉)
8: 作物管理(清明前后进行作物管理)
9: 夏收准备(小满时节准备夏季收获)
10: 秋收工作(秋分时节进行秋季收获)

合理的依赖关系如下(有向边从先修指向后续):
1→3, 2→3, 3→6, 4→6, 6→5, 6→7, 7→8, 8→9, 9→10

请判断该依赖关系是否存在环,若无环则输出一个合理的农事活动顺序(拓扑排序)。若添加循环依赖(如10→1, 8→2),则检测到环并输出提示。

题目要求

实现拓扑排序算法(使用DFS或Kahn算法),分别对合理依赖和添加循环依赖后的情况进行检测,并输出结果。输出格式参照示例。

输出示例

=== 二十四节气农事活动链检测 ===

测试1 - 合理的农事活动链:
检测到循环依赖: False
合理的农事顺序: [4, 2, 1, 3, 6, 7, 8, 9, 10, 5]
详细顺序:
1. 选种准备 - 雨水时节选种,为播种做准备
2. 送粪积肥 - 准备春耕所需的肥料
3. 松土保墒 - 立春时节,土壤解冻,进行松土保墒工作
4. 春耕春播 - 开始春季耕作和播种
5. 播种作业 - 进行大规模播种
6. 农田灌溉 - 春分后开始灌溉
7. 作物管理 - 清明前后进行作物管理
8. 夏收准备 - 小满时节准备夏季收获
9. 秋收工作 - 秋分时节进行秋季收获
10. 小麦追肥 - 惊蛰时节给小麦追肥

测试2 - 有循环依赖的农事安排:
检测到循环依赖: True
发现不合理的农事安排!存在循环依赖
示例:秋收工作需要在松土保墒之前,但松土保墒又是秋收的前提
这种循环依赖在农业生产中不可能实现

测试3 - '秋收工作'的依赖链分析:
依赖链: [10, 9, 8, 7, 6, 3, 1, 2, 4]
依赖路径详情:
 ↳ 秋收工作
 ↳ 夏收准备
 ↳ 作物管理
 ↳ 农田灌溉
 ↳ 播种作业
 ↳ 春耕春播
 ↳ 松土保墒
 ↳ 送粪积肥
 ↳ 选种准备

试题19:传统文化节日礼物打包

题目描述

春节将至,小明需要将礼物装入容量为8的礼品盒中。礼物有5种,每种有名称、价值和体积,礼物可以分割(只装一部分)。礼物数据如下:

  • 中国结:价值80,体积2
  • 春联:价值30,体积1
  • 剪纸:价值60,体积3
  • 灯笼:价值100,体积20
  • 红包:价值40,体积4

要求使用贪心算法(按单位体积价值从高到低)选择礼物,使得总价值最大。输出每一步的选择过程及最终打包方案。

题目要求

实现分数背包问题的贪心算法,输出按价值密度排序后的礼物列表、选择过程(包括全部装入或部分装入)、最终打包方案和总价值。输出格式参照示例。

输出示例

=== 传统文化节日礼物打包问题 ===
礼品盒总容量: 8

所有礼物清单:
1. 中国结(价值:80, 体积:2, 密度:40.00)
2. 春联(价值:30, 体积:1, 密度:30.00)
3. 剪纸(价值:60, 体积:3, 密度:20.00)
4. 灯笼(价值:100, 体积:20, 密度:5.00)
5. 红包(价值:40, 体积:4, 密度:10.00)

按价值密度排序后的礼物:
1. 中国结(价值:80, 体积:2, 密度:40.00)
2. 春联(价值:30, 体积:1, 密度:30.00)
3. 剪纸(价值:60, 体积:3, 密度:20.00)
4. 红包(价值:40, 体积:4, 密度:10.00)
5. 灯笼(价值:100, 体积:20, 密度:5.00)

开始打包:
√ 全部装入 中国结,价值: 80,体积: 2
√ 全部装入 春联,价值: 30,体积: 1
√ 全部装入 剪纸,价值: 60,体积: 3
○ 部分装入 红包,比例: 0.50,价值: 20.0,体积: 2.0

📦 最终打包方案:
✅ 全部装入: 中国结,价值: 80,体积: 2
✅ 全部装入: 春联,价值: 30,体积: 1
✅ 全部装入: 剪纸,价值: 60,体积: 3
⭕ 部分装入: 红包,比例: 0.50,价值: 20.0,体积: 2.0

礼盒总价值: 190.0
礼盒剩余空间: 0.0

试题20:孙悟空翻越火焰山

题目描述

孙悟空站在第一座山上,每座山上标有一个数字,表示从这座山最多能向前跳跃的山数(即能跳到当前位置加上该数字范围内的任何位置)。给定三组火焰山分布,判断孙悟空是否能到达最后一座山,如果能,求出最少跳跃次数。

测试案例:

  1. [2, 3, 1, 1, 4] (能到达)
  2. [3, 2, 1, 0, 4] (不能到达)
  3. [1, 3, 2, 1, 1, 4] (能到达,需要计算步数)

要求输出每组案例的详细分析过程,包括每一步的最远可达位置、跳跃次数,以及最终结论。

题目要求

实现贪心算法,维护当前最远可达位置和步数边界,判断可达性并计算最少跳跃次数。输出每组案例的分析过程和结果。输出格式参照示例。

输出示例

案例1:[2, 3, 1, 1, 4]
=== 孙悟空翻越火焰山分析报告 ===
火焰山分布: [2, 3, 1, 1, 4]
孙悟空开始翻越火焰山...
站在山0,可跳到山2,当前最远能到山2
🐒 第1次跳跃,下一步能到达山2
站在山1,可跳到山4,当前最远能到山4
✅ 从山1可以直接或间接跳到终点!
==================================================
🎉 成功!孙悟空能用2次跳跃到达终点

案例2:[3, 2, 1, 0, 4]
=== 孙悟空翻越火焰山分析报告 ===
火焰山分布: [3, 2, 1, 0, 4]
孙悟空开始翻越火焰山...
站在山0,可跳到山3,当前最远能到山3
🐒 第1次跳跃,下一步能到达山3
站在山1,可跳到山3,当前最远能到山3
站在山2,可跳到山3,当前最远能到山3
站在山3,可跳到山3,当前最远能到山3
🐒 第2次跳跃,下一步能到达山3
❌ 困在山3,无法前进!
==================================================
😞 失败!孙悟空无法翻越所有火焰山

案例3:[1, 3, 2, 1, 1, 4]
=== 孙悟空翻越火焰山分析报告 ===
火焰山分布: [1, 3, 2, 1, 1, 4]
孙悟空开始翻越火焰山...
站在山0,可跳到山1,当前最远能到山1
🐒 第1次跳跃,下一步能到达山1
站在山1,可跳到山4,当前最远能到山4
🐒 第2次跳跃,下一步能到达山4
站在山2,可跳到山4,当前最远能到山4
站在山3,可跳到山4,当前最远能到山4
站在山4,可跳到山5,当前最远能到山5
✅ 从山4可以直接或间接跳到终点!
==================================================
🎉 成功!孙悟空能用3次跳跃到达终点

试题21:爬楼梯问题

题目描述

爬楼梯问题:每次可以爬1级或2级台阶,问爬到第n级台阶有多少种不同的方法。要求用动态规划求解,并展示状态转移过程。

测试n=1,2,3,4,5。输出每种情况的方法数,并演示dp数组的计算过程(至少展示n=3时的递推)。

题目要求

实现两种动态规划解法:基础数组版本(O(n)空间)和滚动变量优化版本(O(1)空间)。对于每个测试n,输出方法数和优化版本的计算过程。输出格式参照示例。

输出示例

============================================================
爬楼梯问题 - 动态规划解法演示
============================================================

★ 测试 1 阶楼梯:
------------------------------
1. 基础动态规划版本:
结果: 1 种方法

2. 空间优化版本:
结果: 1 种方法

总结: 爬 1 阶楼梯共有 1 种不同的方法
============================================================

★ 测试 2 阶楼梯:
------------------------------
1. 基础动态规划版本:
dp[2] = dp[1] + dp[0] = 1 + 1 = 2
结果: 2 种方法

2. 空间优化版本:
初始状态: prev_prev (dp[0]) = 1, prev (dp[1]) = 1
第2阶: 1 + 1 = 2
结果: 2 种方法

总结: 爬 2 阶楼梯共有 2 种不同的方法
============================================================

★ 测试 3 阶楼梯:
------------------------------
1. 基础动态规划版本:
dp[2] = dp[1] + dp[0] = 1 + 1 = 2
dp[3] = dp[2] + dp[1] = 2 + 1 = 3
结果: 3 种方法

2. 空间优化版本:
初始状态: prev_prev (dp[0]) = 1, prev (dp[1]) = 1
第2阶: 1 + 1 = 2
第3阶: 2 + 1 = 3
结果: 3 种方法

总结: 爬 3 阶楼梯共有 3 种不同的方法
============================================================

★ 测试 4 阶楼梯:
------------------------------
1. 基础动态规划版本:
dp[2] = dp[1] + dp[0] = 1 + 1 = 2
dp[3] = dp[2] + dp[1] = 2 + 1 = 3
dp[4] = dp[3] + dp[2] = 3 + 2 = 5
结果: 5 种方法

2. 空间优化版本:
初始状态: prev_prev (dp[0]) = 1, prev (dp[1]) = 1
第2阶: 1 + 1 = 2
第3阶: 2 + 1 = 3
第4阶: 3 + 2 = 5
结果: 5 种方法

总结: 爬 4 阶楼梯共有 5 种不同的方法
============================================================

★ 测试 5 阶楼梯:
------------------------------
1. 基础动态规划版本:
dp[2] = dp[1] + dp[0] = 1 + 1 = 2
dp[3] = dp[2] + dp[1] = 2 + 1 = 3
dp[4] = dp[3] + dp[2] = 3 + 2 = 5
dp[5] = dp[4] + dp[3] = 5 + 3 = 8
结果: 8 种方法

2. 空间优化版本:
初始状态: prev_prev (dp[0]) = 1, prev (dp[1]) = 1
第2阶: 1 + 1 = 2
第3阶: 2 + 1 = 3
第4阶: 3 + 2 = 5
第5阶: 5 + 3 = 8
结果: 8 种方法

总结: 爬 5 阶楼梯共有 8 种不同的方法
============================================================

试题22:榫卯结构的力学传递

题目描述

给定一个榫卯结构承重矩阵(类似数字三角形),每个数字代表该位置的承重能力。从顶部开始,每次可以向下走到左下方或右下方,路径上的承重累加。求从顶部到底部的最大承重路径和,并输出该路径。同时对比贪心算法(每次都选较大的子节点)和动态规划的结果。

承重矩阵如下:
第0层: [5]
第1层: [9, 3]
第2层: [8, 7, 4]
第3层: [4, 6, 9, 3]

要求:

  1. 用贪心算法找出路径,输出承重和及路径。
  2. 用动态规划找出最优路径,输出承重和及路径。
  3. 对比两种算法的结果。

题目要求

实现贪心算法(从上到下每次选择较大的子节点)和动态规划(从底部向上递推)。输出两种算法的选择过程和最终结果。输出格式参照示例。

输出示例

=== 重构后的榫卯结构承重测试 ===
榫卯结构承重矩阵:
第0层: [5]
第1层: [9, 3]
第2层: [8, 7, 4]
第3层: [4, 6, 9, 3]

贪心算法选择过程:
第0层: 选择索引0, 承重5
第1层: 可选索引0(9) 或 1(3) -> 选择索引0, 累计承重14
第2层: 可选索引0(8) 或 1(7) -> 选择索引0, 累计承重22
第3层: 可选索引0(4) 或 1(6) -> 选择索引1, 累计承重28

动态规划计算过程:
第0层: dp[0] = [5]
第1层: dp[1] = [14, 8]
第2层: dp[2] = [22, 21, 12]
第3层: dp[3] = [26, 28, 30, 15]

=== 算法结果对比 ===
贪心算法结果: 承重 28, 路径 [0, 0, 0, 1]
动态规划结果: 承重 30, 路径 [0, 0, 1, 2]

=== 路径对比分析 ===
5(GD)
9(GD) 3
8(G) 7(D) 4
4 6(G) 9(D) 3
❌ 算法结果不一致: 贪心28 vs 动态规划30

试题23:最大子序和

题目描述

给定一个整数数组,求其连续子数组的最大和。分别用贪心算法(Kadane算法思想)和动态规划求解,并对比过程。

测试数据:[-2, 1, -3, 4, -1, 2, 1, -5, 4]

要求:

  1. 用贪心算法(维护当前和,如果当前和为负则重置)输出每一步的过程。
  2. 用动态规划(dp[i]表示以i结尾的最大子序和)输出每一步的过程。
  3. 输出两种算法的最终结果,并验证一致性。

题目要求

实现两种算法,输出每一步的计算过程(参考示例格式)。最终结果应一致。

输出示例

小明9天的零花钱记录:
[-2, 1, -3, 4, -1, 2, 1, -5, 4]
==================================================
贪心算法执行过程:
初始状态: 当前和 = -2, 最大和 = -2
第1天: 当前和-2为负数,重新开始计算
更新最大和 = 1
第2天: 继续累加,当前和 = -2
最大和保持不变
第3天: 当前和-2为负数,重新开始计算
更新最大和 = 4
第4天: 继续累加,当前和 = 3
最大和保持不变
第5天: 继续累加,当前和 = 5
更新最大和 = 5
第6天: 继续累加,当前和 = 6
更新最大和 = 6
第7天: 继续累加,当前和 = 1
最大和保持不变
第8天: 继续累加,当前和 = 5
最大和保持不变
贪心算法结果: 6

动态规划执行过程:
初始化: dp[0] = -2
第1天: dp[1] = max(dp[0] + 1, 1) = 1
当前最大和 = 1
第2天: dp[2] = max(dp[1] + -3, -3) = -2
当前最大和 = 1
第3天: dp[3] = max(dp[2] + 4, 4) = 4
当前最大和 = 4
第4天: dp[4] = max(dp[3] + -1, -1) = 3
当前最大和 = 4
第5天: dp[5] = max(dp[4] + 2, 2) = 5
当前最大和 = 5
第6天: dp[6] = max(dp[5] + 1, 1) = 6
当前最大和 = 6
第7天: dp[7] = max(dp[6] + -5, -5) = 1
当前最大和 = 6
第8天: dp[8] = max(dp[7] + 4, 4) = 5
当前最大和 = 6
动态规划结果: 6

==================================================
算法对比总结:
二种方法结果一致: True
最优连续零花钱和: 6

试题24:传统文化节气活动安排

题目描述

学校文化节有多个基于二十四节气的传统文化活动,每个活动有开始时间和结束时间。要求安排尽可能多的活动,使得活动时间不重叠。请使用贪心算法(按结束时间最早优先)求解。

场景1(标准节气活动):

("立春剪纸", 900, 1030)
("雨水茶艺", 1030, 1130)
("惊蛰种植", 1100, 1200)
("春分踏青", 1300, 1430)
("清明扫墓", 1400, 1530)
("谷雨赏花", 1500, 1630)
("立夏尝新", 1600, 1700)
("小满养蚕", 1700, 1800)

场景2(密集活动挑战):

("端午赛舟", 800, 1000)
("芒种收割", 900, 1100)
("夏至观日", 1000, 1200)
("小暑纳凉", 1100, 1300)
("大暑游泳", 1200, 1400)

要求对每个场景,输出活动按结束时间排序后的列表、选择过程,以及最终安排的活动列表和数量。

题目要求

实现贪心活动选择算法,输出每个场景的排序结果、选择过程及最终方案。输出格式参照示例。

输出示例

🎋 传统文化节气活动安排系统
============================================================

场景1: 春季节气活动安排
----------------------------------------
节气活动安排贪心算法执行过程:
活动按结束时间排序结果:
 1. 立春剪纸: 900-1030 (结束时间: 1030)
 2. 雨水茶艺: 1030-1130 (结束时间: 1130)
 3. 惊蛰种植: 1100-1200 (结束时间: 1200)
 4. 春分踏青: 1300-1430 (结束时间: 1430)
 5. 清明扫墓: 1400-1530 (结束时间: 1530)
 6. 谷雨赏花: 1500-1630 (结束时间: 1630)
 7. 立夏尝新: 1600-1700 (结束时间: 1700)
 8. 小满养蚕: 1700-1800 (结束时间: 1800)

开始选择活动:
 ✅ 选择活动: 立春剪纸 (900-1030)
    更新最后结束时间: 1030
 ✅ 选择活动: 雨水茶艺 (1030-1130)
    更新最后结束时间: 1130
 ❌ 跳过活动: 惊蛰种植 (与上一个活动冲突)
 ✅ 选择活动: 春分踏青 (1300-1430)
    更新最后结束时间: 1430
 ❌ 跳过活动: 清明扫墓 (与上一个活动冲突)
 ✅ 选择活动: 谷雨赏花 (1500-1630)
    更新最后结束时间: 1630
 ❌ 跳过活动: 立夏尝新 (与上一个活动冲突)
 ✅ 选择活动: 小满养蚕 (1700-1800)
    更新最后结束时间: 1800

==================================================
最终活动安排方案
==================================================
成功安排的活动:
 1. 立春剪纸: 900-1030 
 2. 雨水茶艺: 1030-1130 
 3. 春分踏青: 1300-1430 
 4. 谷雨赏花: 1500-1630 
 5. 小满养蚕: 1700-1800 

统计结果:
 - 总活动数量: 5个


场景2: 密集活动安排挑战
----------------------------------------
节气活动安排贪心算法执行过程:
活动按结束时间排序结果:
 1. 端午赛舟: 800-1000 (结束时间: 1000)
 2. 芒种收割: 900-1100 (结束时间: 1100)
 3. 夏至观日: 1000-1200 (结束时间: 1200)
 4. 小暑纳凉: 1100-1300 (结束时间: 1300)
 5. 大暑游泳: 1200-1400 (结束时间: 1400)

开始选择活动:
 ✅ 选择活动: 端午赛舟 (800-1000)
    更新最后结束时间: 1000
 ❌ 跳过活动: 芒种收割 (与上一个活动冲突)
 ✅ 选择活动: 夏至观日 (1000-1200)
    更新最后结束时间: 1200
 ❌ 跳过活动: 小暑纳凉 (与上一个活动冲突)
 ✅ 选择活动: 大暑游泳 (1200-1400)
    更新最后结束时间: 1400

==================================================
最终活动安排方案
==================================================
成功安排的活动:
 1. 端午赛舟: 800-1000 
 2. 夏至观日: 1000-1200 
 3. 大暑游泳: 1200-1400 

统计结果:
 - 总活动数量: 3个

试题25:粒子碰撞路径计数

题目描述

在一个5×5的网格中,粒子从左上角(0,0)出发,要到达右下角(4,4)。网格中有障碍物(值为1的位置不能经过),粒子只能向右或向下移动。请计算所有可能的路径数量。网格如下:

[0, 0, 0, 0, 0]
[0, 1, 0, 1, 0]
[0, 0, 0, 0, 0]
[0, 1, 0, 1, 0]
[0, 0, 0, 0, 0]

要求分别用朴素递归和记忆化递归两种方法求解,并对比性能(运行时间)。输出两种方法的路径数及耗时。

题目要求

实现两个函数:count_paths_naive(朴素递归)和count_paths_memo(使用字典缓存)。测试网格,输出两种方法的结果和时间,并计算性能提升倍数。输出格式参照示例。

输出示例

=== 粒子碰撞路径计数优化实验 ===

网格地图:
S · · # · ·
· # · # · ·
· · · · · #
# # · W · ·
· · · · · ·
· · # · · ·

网格大小: 6x6
障碍物数量: 7

--- 性能对比测试 ---
朴素递归结果: 6条路径
手动记忆化结果: 6条路径
装饰器记忆化结果: 6条路径

朴素递归耗时: 0.000013秒
手动记忆化耗时: 0.000015秒
装饰器记忆化耗时: 0.000025秒

手动记忆化性能提升: 0.9倍
装饰器记忆化性能提升: 0.5倍
结果一致性验证: True ✓

--- 缓存键设计分析 ---
缓存键格式: (x, y) - 使用位置坐标作为唯一标识
这种设计能够准确识别重复的计算状态

--- 大规模网格测试 ---
10x10网格 - 朴素递归: 0.00445秒
10x10网格 - 记忆化优化: 0.00007秒
大规模测试性能提升: 65.2倍

试题26:星座图像压缩存储

题目描述

星座图像通常是一个大型网格,其中大部分像素为0(背景),只有少数位置有星星(非零亮度)。请将以下5×5的星图(0表示背景,非0表示星星亮度)转换为稀疏表示(使用字典存储非零元素),并对比稠密存储和稀疏存储的空间大小。

星图数据:

[
 [0, 0, 0, 0, 0],
 [0, 3, 0, 0, 5],
 [0, 0, 0, 0, 0],
 [0, 0, 2, 0, 0],
 [0, 0, 0, 0, 7]
]

要求:

  1. 输出稀疏字典表示(键为(row,col),值为亮度)。
  2. 计算稠密矩阵的元素总数和非零元素个数,计算空间节省百分比。

题目要求

编写函数dense_to_sparse_dict将稠密矩阵转换为稀疏字典。输出转换后的字典及空间分析。输出格式参照示例。

输出示例

原始星图(稠密矩阵):
[0, 0, 0, 0, 0]
[0, 3, 0, 0, 5]
[0, 0, 0, 0, 0]
[0, 0, 2, 0, 0]
[0, 0, 0, 0, 7]

稀疏字典表示:
{(1, 1): 3, (1, 4): 5, (3, 2): 2, (4, 4): 7}

性能对比演示:
星图大小: 5 x 5 = 25 个像素
非零元素(星星): 4 个
稀疏度: 84.00%
稠密存储空间: O(n²) = O(25)
稀疏存储空间: O(k) = O(4)
空间节省: 84.00%

试题27:传统节日知识问答

题目描述

设计一个中国传统节日知识问答系统,能快速判断用户输入的节日是否为中国传统节日,并给出节日介绍。已知传统节日列表如下:

["春节", "元宵节", "清明节", "端午节", "七夕节", "中元节", "中秋节", "重阳节", "冬至", "腊八节", "小年", "除夕", "龙抬头", "寒食节", "下元节"]

部分节日有详细介绍(存储在字典中)。要求分别用列表遍历和集合成员判断两种方式实现查询,并对比两种方法的查找速度。

用户交互:循环接收用户输入,输入“退出”结束程序。每次查询输出结果,并显示两种方法的查找耗时及速度比。

题目要求

实现FestivalQuiz类,包含列表和集合两种存储方式,以及check_festival_listcheck_festival_set方法。主程序循环接收输入,对每个查询输出两种方法的查找结果和耗时。输出格式参照示例。

输出示例

系统初始化完成!
系统中包含 15 个传统节日
集合大小:15
=== 中国传统节日知识问答系统 ===
已知传统节日: 春节, 元宵节, 清明节, 端午节, 七夕节, 中元节, 中秋节, 重阳节, 冬至, 腊八节, 小年, 除夕, 龙抬头, 寒食节, 下元节
输入'退出'结束程序

请输入一个节日名称:春节
✅ 正确!春节是中国传统节日
📖 知识介绍:农历正月初一,中国最重要的传统节日,象征新年开始
⏱️ 列表查找耗时:0.000010秒
⚡ 集合查找耗时:0.000005秒
🚀 集合查找速度是列表的 2.3 倍!
--------------------------------------------------
请输入一个节日名称:圣诞节
❌ 错误!圣诞节不是中国传统节日
⏱️ 列表查找耗时:0.000008秒
⚡ 集合查找耗时:0.000005秒
🚀 集合查找速度是列表的 1.5 倍!
--------------------------------------------------
请输入一个节日名称:退出

试题28:零食采购大作战

题目描述

你有一个容量为10的背包,有4种零食,每种零食的体积和价值如下:

  • 零食1: 体积2, 价值3
  • 零食2: 体积3, 价值4
  • 零食3: 体积4, 价值5
  • 零食4: 体积5, 价值6

要求:

  1. 若每种零食只能选一次(01背包),求最大总价值。
  2. 若每种零食可以选无限次(完全背包),求最大总价值。
  3. 若前两种零食只能选一次(01背包),后两种可以选多次(完全背包),求最大总价值(混合背包)。

题目要求

实现01背包、完全背包、混合背包的动态规划解法(使用一维数组状态压缩)。输出每种情况的最大总价值。输出格式参照示例。

输出示例

=== 零食采购大作战 ===
背包总容量: 10
可用零食:
零食1: 体积=2, 美味值=3
零食2: 体积=3, 美味值=4
零食3: 体积=4, 美味值=5
零食4: 体积=5, 美味值=6

01背包最大美味值: 13
完全背包最大美味值: 15
混合背包最大美味值: 13