Как сгенерировать случайным образом числа, чтобы в сумме получалось определенное число?

Рейтинг: 0Ответов: 1Опубликовано: 15.01.2023

даны варианты ответа на задачу:

A) 1
B) 2
C) 3
D) 4

Нужно случайным образом сгенерировать числа(%), которые будут отображать вероятность, что это правильный ответ. В сумме должно получаться 100%

Например:

A) 12%
B) 6%
C) 48%
D) 34%

Ответы

▲ 5Принят

Сгенерировать 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