我正在尝试将数字“分离”为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)
或者我的号码是10
,10/6 = 1.66
[0] = 2, [1] = 2, [2] = 2, [3] = 2, [4] = 1, [5] = 1 (Total 10)
我该怎么做?
答案 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)
从一开始。