Разбить x на y частей случайных чисел с максимальным значением n - PullRequest
0 голосов
/ 13 июня 2018

Может ли кто-нибудь предоставить способ разбить число на x количество случайных частей с максимальным значением?

Т.е. общее число, которое нужно разделить = 50 количество частей, которые нужно разделить на = 10 max val на часть =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 количество деталей.Это случайное количество деталей ...

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

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);

Дайте мне знать, если это не то, что вы ищете

0 голосов
/ 13 июня 2018

это один из способов сделать это.сначала создайте равномерно разделенный массив, чтобы получить правильное количество «частей», а затем выполните цикл через него, и для каждой «части» вы добавляете к нему случайное число, удаляя то же число из другого случайного индекса.

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);
...