2012-07-08 64 views

回答

5

非密碼隨機數發生器(RNG)不是真正的隨機數,但它會根據種子生成隨機數。

你要做的是用相同的種子初始化RNG兩次,這樣你就可以得到相同的結果。將RNG播種一次,例如在程序開始時,你會得到像隨機一樣的不同結果。

編輯:代碼如下一樣應該工作:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int random1_6(){ 
    return ((rand() % 6) + 1); 
} 

int main(void){ 
    int a,b; 
    srand(time(NULL)); 

    a = random1_6(); 
    printf("%d.\n",a); 

    b=random1_6(); 
    printf("%d.\n",b); 

    return 0; 
} 
+0

+1用於解釋發生了什麼。 – ArjunShankar 2012-07-08 14:19:28

+0

你能編輯我的代碼來獲得不同的結果嗎? – Conan9x1111 2012-07-08 14:28:05

+0

@ Conan9x1111編輯回答並添加了示例 – ckruse 2012-07-08 14:33:39

3

每次通話時都不要做srand(time(0));只能調用一次。

1

您必須初始化srand()一次隨機數生成種子:在每次叫你重新初始化RNG使用相同的種子,因爲是它最有可能的是,以time(0)兩個後續調用將返回相同的時間戳(秒級精度),因此rand()將返回兩次相同的數字。

如果您在程序開始時(main()入口點)只撥打srand()一次,那麼每次調用rand()都會返回一個不同的數字。

+0

是這樣嗎? – Conan9x1111 2012-07-08 14:32:37

0

你總是使用相同的種子初始化隨機數生成器,所以你會得到相同的隨機序列,它是僞隨機反正。通常你只需要在開始時調用srand來初始化發生器。

此外,您只有6種不同的可能結果,因此獲得相同數字兩次是完全合法的,有1/6的機會。