В течение 3: 5 вы можете сложить их вместе, чтобы получить 8, и выбрать случайное целое число меньше 8. Если это 0, 1 или 2 (три шанса), вы выбираете А, а если это 3, 4, 5, 6 или 7 (пять шансов) вы выбираете B. По кодам вы просто проверите, меньше ли ваше случайное число 3.
Для чего-то вроде 3: 5: 4 вы выбрали бы случайное число меньше 12 (3 + 5 + 4), и если оно меньше 3, вы выбираете A, в противном случае, если оно меньше 8 (3 + 5) вы выбираете B, в противном случае вы выбираете C.
Это может обобщать любое количество альтернатив, но это неэффективно с большим количеством альтернатив, поскольку вы должны проверять случайное число по каждому порогу, который равен O (n). Этот вопрос SO , кажется, предоставляет несколько более эффективных (но более сложных) алгоритмов для взвешенного случайного выбора с большим числом альтернатив.