酷代码 AI
菜单
服务商

礼盒多级排序:总价→最贵→最便宜→编号的 Python 实现与详解

我们来分析这个问题,并写出一个清晰、正确的 Python 解决方案。 --- ### ✅ **问题解析** 我们需要对 `n` 个礼盒进行排序,每个礼盒有 `k` 件商品(价格为整数),排序依据是**多级优先级**: 1. **一级**:礼盒**总价格**(升序) 2. **二级**:礼盒中**最贵商品价格**(即 `max`,升序) 3. **三级**:礼盒中**最便宜商品价格**(即 `min`,升序) 4. **四级**:礼盒**编号**(升序,注意编号从 1 开始) > ⚠️ 注意:编号是输入顺序(第 1 行是礼盒 1,第 2 行是礼盒 2,……),不是价格或其它属性。 --- ### 🧩 **算法步骤** 1. 读入 `n` 和 `k` 2. 对每个礼盒(共 `n` 个): - 读入 `k` 个价格 - 计算:`total = sum(prices)`, `mx = max(prices)`, `mn = min(prices)` - 存储元组 `(total, mx, mn, index)`,其中 `index = i + 1`(因为编号从 1 开始) 3. 对所有元组按 `(total, mx, mn, index)` 升序排序(Python 元组默认字典序升序,完美匹配!) 4. 提取排序后的 `index`,输出成一行空格分隔 --- ### 💻 Python 实现代码 ```python n, k = map(int, input().split()) boxes = [] for i in range(n): prices = list(map(int, input().split())) total = sum(prices) mx = max(prices) mn = min(prices) # 存储 (总价格, 最大值, 最小值, 编号),编号为 i+1 boxes.append((total, mx, mn, i + 1)) # 多级排序:tuple 自动按元素顺序比较 boxes.sort(key=lambda x: (x[0], x[1], x[2], x[3])) # 提取编号 result = [str(box[3]) for box in boxes] print(" ".join(result)) ``` --- ### 🔍 验证样例 输入: ``` 4 3 3 5 2 4 1 5 2 2 4 3 4 3 ``` 计算各礼盒: | 编号 | 价格 | total | max | min | |------|----------|--------|-----|-----| | 1 | [3,5,2] | 10 | 5 | 2 | | 2 | [4,1,5] | 10 | 5 | 1 | | 3 | [2,2,4] | 8 | 4 | 2 | | 4 | [3,4,3] | 10 | 4 | 3 | 排序键: - 1: (10, 5, 2, 1) - 2: (10, 5, 1, 2) - 3: (8, 4, 2, 3) - 4: (10, 4, 3, 4) 排序后顺序(按元组升序): 1. `(8,4,2,3)` → 3 2. `(10,4,3,4)` → 4 3. `(10,5,1,2)` → 2 4. `(10,5,2,1)` → 1 ✅ 输出:`3 4 2 1` —— 完全匹配! --- ### 📌 小贴士(开发建议) - Python 的 `tuple` 排序天然支持多级优先级,无需手动写复杂比较函数。 - 使用 `key=` 参数比自定义 `cmp_to_key` 更简洁安全。 - 数据规模很小(n ≤ 1000),无需优化,清晰第一。 - 注意编号从 `1` 开始,别用 `0` 索引直接当编号! --- ######[AI写代码神器 | 1000点数解答 | 2026-03-16 12:13:21]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]