Как сгенерировать случайным образом числа, чтобы в сумме получалось определенное число?
даны варианты ответа на задачу:
A) 1
B) 2
C) 3
D) 4
Нужно случайным образом сгенерировать числа(%), которые будут отображать вероятность, что это правильный ответ. В сумме должно получаться 100%
Например:
A) 12%
B) 6%
C) 48%
D) 34%
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Сгенерировать n - 1 случайное число, добавить к ним 0 и 100. Отсортировать. Сосчитать разницы между соседями - это ответ.
[21, 98, 24] # случайные числа в интервале [0, 100] [21, 98, 24, 0, 100] # добавлены края диапазона [0, 21, 24, 98, 100] # после сортировки [ 21, 3, 74, 2 ] # разности между соседями, их сумма равна 100
Код:
import random
n = 4
target = 100
samples = [random.randrange(target + 1) for _ in range(n - 1)] + [0, target]
samples.sort()
probs = [b - a for a, b in zip(samples[:-1], samples[1:])]
print(sum(probs), '=', ' + '.join(map(str, probs)))
$ python random-percents.py 100 = 23 + 42 + 29 + 6 $ python random-percents.py 100 = 4 + 49 + 20 + 27 $ python random-percents.py 100 = 16 + 67 + 13 + 4 $ python random-percents.py 100 = 13 + 9 + 23 + 55