Другие языки программирования и технологии

Есть ли программа способная подогнать случайные числа под нужную сумму

Пример, сумма 7 и его нужно разбить на случайные числа и мне надо чтоб чисел было 3 и она выдавала 4, 2, 1
Такое может только опытный главный бухгалтер )))
Styopa Kabilov
Styopa Kabilov
49 488
Лучший ответ
Готовых программ я не знаю, но в принципе ты можешь минут за 10 написать ее сама.

Допустим, тебе нужна сумма 16 из 4 чисел.
Тогда генерируем 4/2=2 случайных числа в диапазоне 0-16/2.
Пусть у нас получилось 3 и 7.
Теперь вычисляем еще 2 числа, такие, чтобы в сумме с каждым сгенерированным они давали 16/2=8. Очевидно, что это 5 и 1.
Вот, у тебя есть 3 7 5 1, всего 16, в целом - вполне случайно.

Это идеальный случай с четными числами, для нечетных понадобятся (очень небольшие) модификации алгоритма. Дерзай.
Ramil Shirinov
Ramil Shirinov
75 459
Eugene Markov А если "Пусть у нас получилось 8 и 8."?
Андрей Сукач С чего бы 16/2 ?

16, 0, 0, 0 тоже вполне себе случайная комбинация.
Сумма 8 -> 6, 1, 1
Сумма 9 -> 7, 1, 1

Так пойдёт? Если не пойдёт, то почему?!
Данил Чумаков
Данил Чумаков
81 918
Василий Фербер Там не должно тупо повторяться, то есть повторы могут быть но не одного числа почти на все
Если сумма задана, одно из чисел определяется другими.
MM
Mubin Mamajonov
60 430
https://jsfiddle.net/n1w69fa4/ - несколько строчек на JS. Покликайте)

Сначала создается случайное число `a` от 0 до N
Потом еще одно случайное `b` от 0 до (N - a)
А третье уже и не надо генерировать, = N - a - b
Тривиальное решение навскидку: для N чисел с суммой S нужно сгенерить N-1 случайное число a_1, a_2,...a_N-1, где a_i генерится от 1 до S - a_1 - a_2 -..- a_i - 1 включительно, а последнее a_N определяется однозначно как S - a_1 -..-a_N-1.
Подозреваю, что шансы на появление у различных разбиений будут разные. Если нужно именно равномерное распределение, нужно думать.
Роман Саныч
Роман Саныч
36 952
Василий Фербер Не нужно равномерное
Наталья, как насчёт чисто математического решения?

1. Генерируется последовательность случайных чисел по произвольному базису.
2. Вычисляется сумма всех членов последовательности.
3. Вычисляется коэффициент пропорциональности суммы к числу 7.
4. Каждый член последовательности отдельно пропорционируется этим коэффициентом.
    При необходимости полученные числа можно округлять. Правда, это усложнит задачу.
Slava Usolycev
Slava Usolycev
16 172
Slava Usolycev Отдельно придётся обрабатывать результат (0, 0, 0), ведь его никак невозможно пропорционировать до 7. Но в данном случае нетрудно увидеть, что это частный случай равенства всех членов последовательности. Значит, и без коэффициента пропорциональности такой результат соответствует последовательности (2⅓, 2⅓, 2⅓).
почему я такой тупой я ничего не догнал.