c# - 单独的数字元素

标签 c# algorithm

<分区>

我正在尝试将数字“分隔”为 X 元素。

我的意思是,如果我的数字是 12 并且我想要的元素数 (X) 是 6,我想为每个元素分开12/6=2,即:

[0] = 2, [1] = 2, [2] = 2, [3] = 2, [4] = 2, [5] = 2 (Total 12)

如果我的号码是 13 那么 13/6=2.1666 在这种情况下我如何分离每个元素?即像这样:

[0] = 3, [1] = 2, [2] = 2, [3] = 2, [4] = 2, [5] = 2 (Total 13)

或者如果我的号码是 1010/6 = 1.66

[0] = 2, [1] = 2, [2] = 2, [3] = 2, [4] = 1, [5] = 1 (Total 10)

我该怎么做?

最佳答案

一种方法是:

  • 创建一个长度为 numberOfParts 的数组,
  • 重复 number 次,
    • 递增数组的每个元素
    • 如果到达数组末尾,
      • 回到数组的开头并递增

在代码中:

private static int[] SeparateNumber(int number, int parts) {
    var array = new int[parts];
    int index = 0;
    for (int i = 0 ; i < number ; i++) {
        array[index++]++;
        if (index == parts) { // end of array reached
            index = 0;
        }
    }
    return array;
}

这有点像将一副纸牌分成几叠。您将 numberOfStacks 牌发完,然后按顺序在每叠牌的顶部发牌,直到发完牌。

这是一个过程较少、功能更强大的解决方案:

private static int[] SeparateNumber(int number, int count) {
    var remainder = number % count;
    var quotient = number  / count;
    return Enumerable.Repeat(quotient + 1, remainder)
        .Concat(Enumerable.Repeat(quotient, count - remainder)).ToArray();
}

关于c# - 单独的数字元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48733375/

相关文章:

c# - Stream.CopyTo 抛出 System.OutOfMemoryException C#

c# - 转换 Func<> 类型

algorithm - 如何使用 Powershell 获取证书的安全哈希算法

python - 如何改善按排名搜索值(value)?

c++ - 代码运行完美,但从 main() 返回时崩溃

c# - ASP.NET MVC AsyncController 和 IO 绑定(bind)请求

c# - VS2012 Intellisense 中断工作流项目

C# 代码卡住形式,我错过了一个中断的循环吗?

algorithm - 什么是找到重叠矩形区域的有效算法

regex - 将缩写与字典匹配的最快方法