Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 生成一个数组,该数组只使用2个数字相加到特定值?_Javascript_Arrays_Algorithm - Fatal编程技术网

Javascript 生成一个数组,该数组只使用2个数字相加到特定值?

Javascript 生成一个数组,该数组只使用2个数字相加到特定值?,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我需要随机生成一个“网格”,其中数组中的整数总和为8(或任意#),仅使用1和2 示例输出为: [1, 2, 2, 1, 2] 或 或 这基本上是针对JS的。根据我上面的评论,下面是它在JavaScript中的工作方式(请参阅) var max=8; var总和=0; var数=[]; while(总和最大值){ 数字。推送(1); 总和+=1; }否则{ 数字。推(数字); 总和+=数字; } } 您可以使用递归来实现这一点 WaysToGet(8) = WaysToGet(7) + 1 an

我需要随机生成一个“网格”,其中数组中的整数总和为8(或任意#),仅使用1和2

示例输出为:

[1, 2, 2, 1, 2]


这基本上是针对JS的。

根据我上面的评论,下面是它在JavaScript中的工作方式(请参阅)

var max=8;
var总和=0;
var数=[];
while(总和<最大值){
变量编号=数学楼层((数学随机()*2)+1);
如果(总和+数字>最大值){
数字。推送(1);
总和+=1;
}否则{
数字。推(数字);
总和+=数字;
}
}

您可以使用递归来实现这一点

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);
    }
我还没有测试过它,但这是一个可以实现的想法。

这应该可以做到:

for (var res=[], sum=0; sum<8; sum+=res[res.length-1])
    res.push(Math.floor(1 + Math.random() * Math.min(8-sum, 2)));

for(var res=[],sum=0;sumAny所需的值分布?生成随机1/2,直到所有值的总和大于等于6。然后,如果sum=6,则添加一个2;如果sum=7,则添加一个1。这样,一个解决方案完成。对于另一个解决方案,请使用随机数重新开始。因为您找到的问题中的大多数答案都是伪代码,您不能简单地用JavaScrip写下它们吗t?你试过了吗?你在哪里卡住了?你试过什么?当数字的总和小于最大值时:创建一个介于1和2之间的随机数;检查总和加上这个数字是否仍然小于或等于最大值;如果是,则将其添加到列表中,否则,将1添加到列表中。按数字递增总和想要一个随机数组,而不是所有数组。另外,当函数不返回任何内容时,为什么要将字符串连接到结果中?顺便说一句,问题是关于javascript的。@Bergi修复了代码,我只是想建议一个方法,以便OP可以使用它来实现,但在javascriptHm上下文中,您的答案更正确,这仍然正确似乎不起作用。如果
x
不是
1
2
,该函数不返回int。请尝试
return
而不是
print
,并随机选择两个递归调用中的一个(
WayToGet(8)
=
WayToGet(7)+1
WayToGet(6)+2
)简洁-是;干净-而不是:-)
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);
    }
for (var res=[], sum=0; sum<8; sum+=res[res.length-1])
    res.push(Math.floor(1 + Math.random() * Math.min(8-sum, 2)));