我試圖運行一百萬卡片遊戲模擬返回一個百分比「賭場房子的邊緣。」這將輸出一個隨機洗牌一百萬次?蘭德()C++
我對rand()函數的理解還不夠清楚,無法確定這是否會每次都會產生一個新的混洗或者它是否有限制。換句話說,在一百萬場比賽中,相同模式的洗牌會出現嗎?
srand(time(NULL));
for (int games=0;games<iGames;games++){
///shuffle///
for (int i=0; i<(iUserDeckSize-1); i++) {
int r = i + (rand() % (iUserDeckSize-i)); // Random remaining position.
card temp = cards[i]; cards[i] = cards[r]; cards[r] = temp;
}
// rest of card game code goes here
}
如果我的記憶是正確的,那麼''應該有一個洗牌......這裏:http://www.cplusplus.com/reference/algorithm/random_shuffle/ –
nhahtdh
rand()是一個僞隨機數發電機。這意味着*最終*(並且最終可能是一個非常大的 - 不關心)將會有重複序列。然而,由於這種重新啓動可能發生「並不總是在洗牌開始時」,因此似乎可能有比所使用的PRNG的週期長度更多的* shuffle排列。 – 2012-12-24 05:51:21
我相信它是特定於實現的,請參閱http://stackoverflow.com/questions/1026327/what-common-algorithms-are-used-for-cs-rand。但是如果實際的應用開始重複這麼快,我會感到震驚的,我想至少你會進入int32所允許的數十億美元。 – PeterJ