任何人都可以提供一种方法将数字拆分成具有最大值的x个随机部分吗?
即。 要拆分的总数= 50 分成几部分= 10 每个零件的最大值= 10
will return something like
3,7,4,6,9,1,2,8,5,5
每个部分都是随机的。没有统一只需要y个随机数加起来x,每个部分最大val。
我已经发现了这个
var n = 16;
var a = [];
while (n > 0) {
var s = Math.round(Math.random() * (n- 1)) + 1;
a.push(s);
n -= s;
}
console.log(a);
但是这不会给出x个部分。这是随机数量的部分...
答案 0 :(得分:2)
这是一种方法。首先创建一个均匀分布的数组,以获得正确的“部分”,然后循环通过它,并为每个“部分”添加一个随机数,同时从另一个随机索引中删除相同的数字。
var n = 160;
var a = [];
var x = 10;
var b = n/x;
for(var i=0; i<x; i++){
a.push(b);//create an array of 10 parts with the same value
}
for(var i=0; i<x; i++){
var s = Math.round((Math.random()*b)) ;
var index = Math.round((Math.random()*x))-1 ;
a[i] += s;
a[index] -=s;
}
console.log(a);
答案 1 :(得分:1)
var n = 16;
var a = [];
var parts = 10;
var maxValuePerPart = 10;
for(let i = 0; i < parts; i++){
let max = (maxValuePerPart < n) ? maxValuePerPart : n;
let min = 1;
var s = Math.floor(Math.random() * (max - min)) + min;
a[i] = s;
n -= s;
}
console.log(a);
如果这不是你想要的话,请告诉我