Скажем, у меня есть 10 призов, чтобы дать 100 человек.Каждый человек получает выстрел, по одному за раз.Так что, если первый человек не сможет выиграть приз, вероятность возрастет, 10 из 99, и так один ... Также все 10 призов ДОЛЖНЫ быть разыграны.
Как лучше написать это так, чтобы к концу, если еще оставался приз, у этого человека был шанс 1 к 1 получить приз ...
Что я думал так:
int playersLeft = 100
int winners = 0
while (winners < 10)
winners += (random.Next(playersLeft--)<(10-winners)) ? 1 : 0;
Я хотел знать, есть ли лучший или более прямой способ сделать это.Я знаю, что это кажется простым, но эта простая задача является частью очень важного аспекта приложения, и она должна быть правильной.1012 *
На самом деле существует неограниченное количество игроков, каждый из которых имеет вероятность выигрыша X в Y, скажем, 10/100 = 10%.Однако, если я оставлю это генератору случайных чисел, есть вероятность, что из 100 игроков только 9 выиграют или, что хуже всего, 11. В моем приложении я должен убедиться, что не более и не менее 10 игроков на каждые 100 будутвыиграть.