只使用2个数字生成一个加起来特定值的数组?

时间:2014-06-03 16:51:09

标签: javascript arrays algorithm

我需要随机生成一个"网格"其中数组中的整数总和加上 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。

3 个答案:

答案 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);
    }

我没有对它进行过测试,但是你可以按照这个想法来实现它。