C#实现包裹从重到轻排序堆叠思路及对应Codin Games题目求助
C# 包裹重量排序堆叠实现方案
核心需求拆解
- 排序规则:包裹重量从大到小降序排列
- 堆叠规则:重量越大的包裹位置越靠下,重量越小的包裹位置越靠上
实现步骤
1. 数据结构定义
如果仅处理重量值,直接用数值集合即可;如果需要绑定包裹其他属性,可自定义包裹类:
public class Package { // 包裹唯一标识 public string PackageNo { get; set; } // 包裹重量单位可根据需求调整为kg/g等 public int Weight { get; set; } }
2. 排序逻辑实现
C# 推荐直接使用LINQ的OrderByDescending方法实现降序排序,代码极简且性能符合常规业务需求:
using System.Linq; using System.Collections.Generic; // 示例输入数据 List<Package> originalPackages = new List<Package> { new Package { PackageNo = "P1", Weight = 2 }, new Package { PackageNo = "P2", Weight = 7 }, new Package { PackageNo = "P3", Weight = 3 }, new Package { PackageNo = "P4", Weight = 5 } }; // 按重量降序排序 List<Package> sortedPackages = originalPackages.OrderByDescending(p => p.Weight).ToList();
如果仅需要处理重量数值集合,代码可以更简化:
List<int> weights = new List<int> { 2,7,3,5 }; // 降序排序 var sortedWeights = weights.OrderByDescending(w => w).ToList();
3. 堆叠逻辑适配
排序后的sortedPackages列表顺序为[P2(7), P4(5), P3(3), P1(2)],适配不同的堆叠输出需求:
- 如果要输出从下到上的堆叠顺序:直接遍历
sortedPackages即可,第一个元素就是最底层的最重包裹 - 如果要输出从上到下的堆叠顺序:反转排序后的列表再遍历,第一个元素就是最上层的最轻包裹
- 如果需要用栈结构模拟堆叠(符合先进后出的堆叠操作逻辑):
Stack<Package> packageStack = new Stack<Package>(); // 先压入最重的包裹到栈底 foreach (var pkg in sortedPackages) { packageStack.Push(pkg); } // 后续取包裹时直接Pop,每次拿到的都是最上层的轻包裹
对应题目说明
你提到的题目对应CodinGame平台的《Parcel Stacking》入门题,核心考察点就是基础排序API的使用和降序规则适配。
参考附图说明
- 题目内容图:明确标注排序规则为重量降序,堆叠规则重下轻上
- 默认代码图:平台提供的默认代码为读取输入的N个包裹重量,要求输出排序后的堆叠结果
- 堆叠效果示意图:直观展示5kg包裹在最下,3kg在中间,1kg在最上的正确堆叠效果
内容的提问来源于stack exchange,提问作者GlitchyYeti
相关产品推荐
相关产品推荐

