Легче сгенерировать Random(0,3) с учетом Random(0,1). Random(0, 3) можно смоделировать двумя последовательными подбрасываниями монеты, чтобы получить четыре корзины: 00, 01, 10, 11.
В общем, Random (0, 2 ^ n-1) тривиально легко сгенерировать при заданном Random (0, 1) [т.е. честная монета]. Любой другой Random(0, n) будет сложно сгенерировать, и он не будет по-настоящему «случайным», потому что вам придется заранее определить количество результатов, которые вы хотите рассматривать как принадлежащие «другим» корзинам.
Вы можете почти подделать Random(0,2) вот так (псевдокод, подобный Ruby):
options = ['h', 't', 'n'] # heads, tails, neither
hash = {'h' => 0, 't' => 0, 'n' => 0} # number of 'heads', 'tails', 'neither'
rand = options[random(0, 1)]
rand = 'n' if (hash[rand] % 3 == 2) # every third 'h' or 't' is an 'n'
hash[rand] ++ # update buckets
Опять же, это не «случайно», поскольку каждый третий орёл или решка считается «ни тем, ни другим».
ОБНОВЛЕНИЕ: см. соответствующий вопрос для более элегантного ответа. Создание генератора случайных чисел из подбрасывания монеты
person
Saleem
schedule
13.10.2013