将num分隔为元素

时间:2018-02-11 15:55:38

标签: c# algorithm

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

我的意思是,如果我的号码为12且我想要的元素数量(X)为6,我想为每个元素12/6=2分隔,即:< / p>

[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)

我该怎么做?

2 个答案:

答案 0 :(得分:4)

一种方法是:

  • 创建一个长度为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();
}

答案 1 :(得分:1)

对于数字N,创建一个X元素数组,每个元素的值为floor(N / X)。现在,通过将每个值递增1,将R的余数N / X中的单位分配给数组单元格0...R-1

示例:

N = 10, X = 4

// array of X elements, each with the value, floor(10 / 4) = 2
array = [2, 2, 2, 2]

R = remainder 10 / 4 = 2

通过将值增加1,将R中的单位分配给数组单元格0..(2-1)

array = [3, 3, 2, 2]

当然,我们可以通过分配

来避免增量
the first R cells with the value, floor(N / X) + 1

and the rest with the value, floor(N / X)

从一开始。