inomdzhon92
@inomdzhon92
html, css, js, nodejs

Как получить массив случайных чисел, сумма которых равна 500?

Нужен массив положительных случайных чисел, сумма элементов которых будет равна, допустим, 500. Количество элементов передаётся параметром конечно, но обычно их 3 или 4.
Как не пытаюсь успехов мало. Пробовал, грубо говоря, делить 50 на части и потом их умножать на 10 и ещё один лютый вариант. Ну а самая забавное решение - это генерировать до тех пор, пока не будет нужная сумма, бедный проц.
  • Вопрос задан
  • 4014 просмотров
Пригласить эксперта
Ответы на вопрос 5
Mrrl
@Mrrl
Заводчик кардиганов
Предположим, что числа нужны целые неотрицательные. Если числа могут быть нулевыми, делаете так:
n1=irand(501); // от 0 до 500
n2=irand(501); // от 0 до 500
n3=irand(501); // от 0 до 500
sort(n1,n2,n3); // сортируете по возрастанию любым подходящим способом
x0=n1; x1=n2-n1; x3=n3-n2; x4=500-n3;

Если числа могут быть только положительными, то поступаете аналогично:
n1=irand(497); // от 0 до 496
n2=irand(497); // от 0 до 496
n3=irand(497); // от 0 до 496
sort(n1,n2,n3); // сортируете по возрастанию любым подходящим способом
x0=n1+1; x1=n2-n1+1; x3=n3-n2+1; x4=496-n3+1;

Распределение будет слегка неравномерным (наборы, содержащие нули в первом случае и единицы - во втором, будут встречаться чуть реже), но и это можно исправить, слегка усложнив программу.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В вашей постановке задачи нет ограничений на значения элементов => они могут быть положительными и отрицательными => не нужно ничего делить, просто заполняйте массив случайными числами со знаком, а один элемент сделайте равным разности требуемой муммы и суммы остальных элементов.
Ответ написан
00 Заданный диапазон случайного числа от A до C
01B = C - A
02 Сгенерировать случайное число R в диапазоне от 0 до B
03 Добавить R + A в массив
04 Изменить B = B - R
05 Повторять от 02 по количеству нужных чисел минус 1
06 Остаток B + A будет последним числом
Ответ написан
Комментировать
Ronnie_Gardocki
@Ronnie_Gardocki
Я у мамы фронтендщик.
На ночь гляда я накидал такой рандомный говнокод, но суть вы думаю поймете
function random500() {
  var n1 = Math.ceil(Math.random()*499);
  var n2 = Math.ceil(Math.random()*(500-n1));
  var n3 = 500 - n1 - n2;
  console.log(n1 + " " + n2 + " " + n3);
}

Можете прямо в консоле f12 погонять. Потолок в 499 для первого числа соответственно чтобы случайно не попалось 500, тогда остальные два (или сколько вам надо) будут равны нулю. По идее надо заменить на 500, но это уже сами думайте.
Ответ написан
@DeScWD
int getRandom()
{
     return 500;
}


или
//
// код где массив заполняется любыми числами
//
int summ = (array - array) + 500;
printf("Сумма всех чисел в массиве = %d", summ);


или
nachalo:
int massive[10];
int summa = 0;
for(int i = 0; i < 10; i++, array[i] = rand() % 500);
for(int i = 0; i < 10; i++, summa += array[i]);
if(summa != 500)
    goto nachalo;
else if(summa == 500)
    goto konec;
konec:
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы