You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的使用和降序规则适配。

参考附图说明

  1. 题目内容图:明确标注排序规则为重量降序,堆叠规则重下轻上
  2. 默认代码图:平台提供的默认代码为读取输入的N个包裹重量,要求输出排序后的堆叠结果
  3. 堆叠效果示意图:直观展示5kg包裹在最下,3kg在中间,1kg在最上的正确堆叠效果

内容的提问来源于stack exchange,提问作者GlitchyYeti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:15:06