Краткий ответ: вызов srand()
- это , а не , как "бросание кубика" для генератора случайных чисел.И это не похоже на перетасовку колоды карт.Во всяком случае, это больше похоже на простую колоду карт.
Думайте об этом так.rand()
раздает из большой колоды карт, и каждый раз, когда вы ее коллируете, все, что нужно сделать, это выбрать следующую карту сверху колоды, дать вам ценность и вернуть эту карту в конец колоды.(Да, это означает, что «случайная» последовательность будет повторяться через некоторое время. Однако это очень большая колода * : обычно 4 294 967 296 карт.)
Более того, каждый раз, когда ваша программа запускается,Совершенно новая колода карт покупается в игровом магазине, и каждая новая колода карт всегда имеет одинаковую последовательность.Так что, если вы не сделаете что-то особенное, каждый раз, когда ваша программа запускается, она будет возвращать точно такие же «случайные» числа обратно из rand()
.
Теперь вы можете сказать: «Хорошо, так как мне перетасоватьколода?»И ответ (по крайней мере, что касается rand
и srand
), нет способа перетасовать колоду.
Так что же делает srand
?Исходя из аналогии, которую я здесь строю, звонить по номеру srand(n)
- все равно, что сказать: «обрежьте колоду n
карт сверху».Но подождите, еще одна вещь: на самом деле возьмите другую совершенно новую колоду и вырежьте ее n
карты сверху .
Так что если вы позвоните srand(n)
, rand()
,srand(n)
, rand()
, ..., с одним и тем же n
каждый раз, вы не просто получите не очень случайную последовательность, вы на самом деле получите одно и то же число обратно из rand()
каждый раз,(Не обязательно тот же номер, который вы передали srand
, но один и тот же номер обратно от rand
снова и снова.)
Поэтому лучшее, что вы можете сделать, это отрезать колоду один раз то есть, вызывайте srand()
один раз, в начале вашей программы, с n
, который является достаточно случайным, так что вы будете начинать с другого случайного места в большой колоде при каждом запуске вашей программы.
[PS Да, я знаю, в реальной жизни, когда вы покупаете совершенно новую колоду карт, она обычно в порядке, а не в случайном порядке.Чтобы провести аналогию здесь, я представляю, что каждая колода, которую вы покупаете в игровом магазине, имеет, казалось бы, случайный порядок, но точно такой же, казалось бы, случайный порядок, как и любая другая колода карт, которую вы покупаете в том же магазине.Вроде как одинаково перемешанные колоды карт, которые они используют в турнирах по бриджу.]