Javascript 如何将N个项目分成6个随机组,使总和始终相同?

Javascript 如何将N个项目分成6个随机组,使总和始终相同?,javascript,ecmascript-6,Javascript,Ecmascript 6,我想生成一个包含6个元素的数组,其中的和总是N。只有正整数 var arr = generateArray(); arr.length === 6; //always true arr.reduce((a,b) => a + b) === 16; //also always true 基本上是一种更优雅的方式: rndInt = (max) => Math.floor(Math.random() * Math.floor(max)), rndAssign = (piles, ite

我想生成一个包含6个元素的数组,其中的和总是N。只有正整数

var arr = generateArray();
arr.length === 6; //always true
arr.reduce((a,b) => a + b) === 16; //also always true
基本上是一种更优雅的方式:

rndInt = (max) => Math.floor(Math.random() * Math.floor(max)),
rndAssign = (piles, items) => {
    let groups = new Int8Array(piles);
    for (i = 0; i < items; i++) {
        groups[rndInt(piles)]++
    }
    return groups
},

您可以尝试以下方法:

const generatarray=sum=16,groupsQty=6=>{ 此.currentSum=0; //创建给定长度的空数组,并使用总和不超过给定总和的项填充该数组 返回数组.from{length:groupsQty}.reduceres,curr,ind=>{ const item=ind==groupsQty-1?sum-this.currentSum:Math.floorMath.random*sum+1-this.currentSum; //存储当前和 此.currentSum+=项目; 返回[ …res, 项目 ] }, [] }; const arr=generatarray; console.logarr; console.log'LENGTH:',arr.LENGTH;
console.log'SUM:',arr.reducea,b=>a+b,0 您可以获取一个包含值的数组

[1,2,3,4,5,6,7,8,9,10,11]或 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], 这取决于您是否也希望为零,并使用brte force方法通过获取六个元素来获得总和为16的值的任何可能组合

对于进一步的选择,您可以选择一个随机数组。这个随机值是正态分布的

结果可能需要更长的时间才能运行

函数get6value{ 功能itertemp{ 返回函数v{ var t=温度concatv; 如果t.length==6{ 如果t.reducead==16{ 结果:pusht; } 回来 } 价值观。forEachitert; }; } 常数 相加=a,b=>a+b, 结果=[]; 价值观; 返回结果; } var small=get6[1,2,3,4,5,6,7,8,9,10,11], big=get6[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; console.logsmall.length;//3003 console.logsmall.mapa=>a.join'; console.logbig.length;//20349 console.logbig.mapa=>a.join';
.作为控制台包装{最大高度:100%!重要;顶部:0;}您尝试了什么?什么不起作用?你有负数或相同的值吗?我不知道怎么做,也不知道如何验证我做得对。统计是很棘手的…我不知道随机数据应该是什么样子。@NinaScholz用一个我觉得非常庞大的例子更新了这个问题。