這是一個非常棒的意外功能,它使得「洗牌」一系列「卡片」變得糟糕。我得到相同數字的事實告訴我,每次挑選單獨的種子都會遇到一些問題。我是否使用srand48
或time(NULL)
通話不正確?我是否缺少一些潛在的邏輯缺陷? time()
的值是不是沒有足夠的時間間隔?爲什麼我的C隨機數發生器只返回「42」?
代碼正在Linux上運行。
void shuffle()
{
int i_rnd; /* Integer random number, range 0..100 */
int i_rnd2;
card tempCard; /*temporary card to facillitate swapping*/
int i = 0; /*can't use a FOR loop 'cause we're not using c99 standard*/
while(i < 1000)
{
srand48((unsigned) time(NULL)); /* Seed the random number generator */
i_rnd = (int) (drand48() * 100);
i_rnd = i_rnd%52; // return a random number 0-51
i_rnd2 = (int) (drand48() * 100);
i_rnd2 = i_rnd2%52; // return a random number 0-51
/*we have two random numbers, now exchange the two objects with the
/picked array indices */
tempCard = cardDeck[i_rnd];
cardDeck[i_rnd]=cardDeck[i_rnd2];
cardDeck[i_rnd2]=tempCard;
//swap complete. increment counter so we can eventually get out of the while
i++;
}
return;
}
42是生命,宇宙和一切的答案。 – 2011-02-04 01:36:35
該程序給你** **答案,而不必經過這些步驟。我希望我有一臺像你這樣的電腦。 – Mehrdad 2011-02-04 01:39:23