我需要随机生成一个"网格"其中数组中的整数总和加上 8(或任何#),只使用1和2。
示例输出将是:
[1, 2, 2, 1, 2]
或
[1, 1, 2, 1, 1, 1, 1]
或
[2, 2, 2, 2]
这基本上是How do I generate random numbers in an array that add up to a defined total?但是对于JS。
答案 0 :(得分:2)
这应该这样做:
for (var res=[], sum=0; sum<8; sum+=res[res.length-1])
res.push(Math.floor(1 + Math.random() * Math.min(8-sum, 2)));
答案 1 :(得分:1)
根据我上面的评论,以下是它在JavaScript中的工作方式(参见jsBin)
var max = 8;
var sum = 0;
var numbers = [];
while (sum < max) {
var number = Math.floor((Math.random() * 2) + 1);
if (sum + number > max) {
numbers.push(1);
sum += 1;
} else {
numbers.push(number);
sum += number;
}
}
答案 2 :(得分:0)
您可以使用递归来实现此目的,
WaysToGet(8) = WaysToGet(7) + 1 and WaysToGet(6) + 2
所以尝试这样的事情,
int WaysToGet(int x) {
if(x == 1 || x == 2) {
return x;
}
print(WaysToGet(x-1) + "," + 1);
print(WaysToGet(x-2) + "," + 2);
}
我没有对它进行过测试,但是你可以按照这个想法来实现它。