gpt4 book ai didi

c# - 使用最大金额拆分数字?

转载 作者:行者123 更新时间:2023-12-04 00:18:50 26 4
gpt4 key购买 nike

我有点卡在这个:

假设我想要 45 件元素,但我最多可以拥有 10 件元素。所以我想要一个基于此返回 [10, 10, 10, 10, 5] 的集合。

这是我目前拥有的。 (是的,我必须在我的项目中使用 unsigned int16,但如果您的示例是常规整数并不重要)。

ushort Ceiling = (ushort)Math.Ceiling((double)Amount / (double)MaxStackSize);
ushort[] Sizes = new ushort[Ceiling];

for (ushort i = 0; i < Ceiling; i++)
{
if (Amount != MaxStackSize && i == Ceiling - 1)
{
Sizes[i] = (ushort)(Amount % MaxStackSize);
}
else
{
Sizes[i] = MaxStackSize;
}
}

它在一定程度上起作用,但有时模块会返回 0。(例如 10 % 10 或 30 % 10)。或者也许有更好的方法来代替我正在做的事情。我将不胜感激!

最佳答案

使用 LINQ 可以使用下一个方法:

using System.Linq;


ushort Amount = 45;
ushort MaxStackSize = 10;

ushort div = (ushort) (Amount / MaxStackSize);
ushort mod = (ushort) (Amount % MaxStackSize);

ushort[] Sizes;

if (mod == 0)
{
Sizes = Enumerable.Repeat<ushort>(MaxStackSize, div).ToArray();
}
else
{
Sizes = Enumerable.Repeat<ushort>(MaxStackSize, div).Concat(new ushort[] {mod}).ToArray();
}

这里是 complete sample .


更新:

@Gimly 在评论中指出:

I wouldn't even put the else, the first part in both your if and else is repeated, so you could always do the first part and only do the Concat part in the if (reversed).

这是一个修改后的解决方案,使用@Gimly 的提示:

using System.Collections.Generic;
using System.Linq;


ushort Amount = 45;
ushort MaxStackSize = 10;

ushort div = (ushort) (Amount / MaxStackSize);
ushort mod = (ushort) (Amount % MaxStackSize);

IEnumerable<ushort> result = Enumerable.Repeat<ushort>(MaxStackSize, div);

if (mod != 0)
result = result.Concat(new ushort[] {mod});

ushort[] Sizes = result.ToArray();

这里是 complete sample .

关于c# - 使用最大金额拆分数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62255769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com