Если я правильно понимаю ваши требования, вы хотите сгенерировать массив из n
чисел с фиксированной суммой (назовем это s
).
Начнем с генерации n
случайных чисел.Math.random()
в Javascript создает числа от 0 до 1, например:
function randomArray(length, sum) {
return new Array(length).fill(0).map(() => Math.random());
}
const rand = randomArray(5, 1);
console.log(rand);
console.log('Sum: ', rand.reduce((a, b) => (a + b), 0));
Эта функция создает новый массив с использованием параметра length
, заполняет его 0
для его инициализации, а затем заменяет каждый элемент случайным числом.
Чтобы выполнить ограничение sum
, нам нужно сделать три вещи:
- Суммировать все случайные числа;
- Разделить желаемую сумму на вычисленную сумму, чтобы получитьмасштабный коэффициент и
- Умножьте каждое число на этот масштабный коэффициент.
function randomArray(length, sum) {
const rawRandom = new Array(length).fill(0).map(() => Math.random());
const multiplier = sum / rawRandom.reduce((a, b) => (a + b), 0);
return rawRandom.map(n => (n * multiplier));
}
const rand = randomArray(5, 1);
console.log(rand);
console.log('Sum: ', rand.reduce((a, b) => (a + b), 0));