Помогите решить задачку. Нужно на js написать функцию, которая будет возвращать массив случайных чисел в диапазоне от min до max, при этом количество элементов должно быть равно n, а сумма всех чисел массива m.
Например:
min = 1
max = 5
n = 5
m = 17
должен получиться один из вариантов [4, 5, 3, 2, 3]
JavaScript
Задача по программированию на JavaScript
это ппц какая сложная задача! разложение на слагаемые называется. я такое еще не проходил но своровал формулу нахождения всех комбинаций для заданного натуралоьного числа. и все эти комбинации фильтрую по твоим хотелкам из задачи. вышло много кода можно доделать но я пока в этом не шарю! но работает
const getRandomIntInclusive = (min, max) => {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1) + min);
};
// эту функцию своровал с сайта!! это комбинаторика сложно для меня
function split(n) {
var result = [];
var temp = [];
for(var i = 0; i < n; ++i) {
temp.push(1);
}
while(temp[0] !== n) {
result.push([...temp]);
var min = temp[0];
var minindex = 0;
var sum = temp[0];
var tempsum = temp[0];
for(var j = 1; j < temp.length - 1; ++j) {
tempsum += temp[j];
if (min > temp[j]) {
min = temp[j];
minindex = j;
sum = tempsum;
}
}
temp[minindex] += 1;
sum += 1;
temp.splice(minindex+1);
for (var k = 0; k < n - sum; ++k) {
temp.push(1);
}
}
return result;
}
// тут уже твоя функция. надо проверить на ввод плохих данных еще !
function random(min, max, n, m) {
var splittedVariants = split(m);
var results = splittedVariants
.filter((splittedVariant) => {
if (splittedVariant.length !== n) {
return false;
}
return splittedVariant.every((number) => {
return number >= min && number
!!! #1 Chika
Спасибо за решение, оно работает, но как я и ожидал только с небольшим набором чисел)) если выбрать допустим от 1 до 10, 10 чисел и сумму 97, то получаем бесконечный цикл)) а мне нужен еще больше набор чисел) походу без супер компьютера мою не решить)
Давид
или просто сделать словарь уже вычесленных чисел на супер компьютере бгг )
let n = 5;
let min = 1;
let max = 5;
let m = 17;
let array = [];
function exercise() {
for (let i = 0; i < n; i++) {
array.push(Math.floor(Math.random() * (max - min) + min))
}
return array;
}
console.log(exercise());
Вот как то так, а как учитывать m я не придумалПохожие вопросы
- Подскажите книги для изучения javascript? Хочу начать изучать веб программирование javascript подойтет для начала?
- Имеет ли смысл изучать JavaScript если я полный ноль в веб программировании?
- JavaScript программирование IT
- Задача по JavaScript. Заполнение объектов через цикл в JavaScript
- Задача JavaScript, улитка в колодце (вн)
- Для чего практически нужен цикл в языках программирования javascript, php ?
- Какой язык программирования изучить 2-м? Я думаю, JavaScript попробовать, посоветуйте книги по его изучению
- Хочу начать учить язык программирование, но не могу определиться какой. Что вы можете сказать по поводу JavaScript.
- Для чего в javascript технологии объектно ориентированного программирования? Неужели на нем пишут серьезные программы?
- Язык программирования JavaScript будет ли более востребованным в будущем?