2012-05-17 43 views

回答

16

因爲你每次播種的值都是相同的– time只有二級精度,我很確定你的電腦可以在一秒內處理這六個循環迭代。 ; - ]

種子一旦,在節目的開始。

+3

聽起來像我需要你的建議或購買一個速度較慢的計算機。謝謝您的幫助! – newToProgramming

+2

@ newToProgramming,祝你好運,找到任何仍然有效的計算機,足夠慢。 – chris

+2

我真的很困惑,爲什麼有人低估了這一點。 – chris

3

因爲你通常每次都餵食同一種子,因爲你的環路要花費不到1秒的時間。

srand函數只能在程序的生命週期中調用一次。

3

您應該在開始時使用srand一次。每個可能的種子對應於一組特定的僞隨機數,當使用種子時它們總是相同的。既然你打算以秒爲單位,你沒有時間去改變。因此,你每次都得到同一組數字的第一個數字。

0

這是會爲你的情況

#include<iostream> 
    #include "time.h" 

    using namespace std; 

    // Reset the random number generator with the system clock. 
    void seed() 
    { 
     srand(time(0)); 
    } 

    void printRandomNumber() 
    {   
     cout << rand() % 3; 
    } 

    int main() 
    { 
     seed(); 
     for(int i=0; i<=5; i++) 
     { 
      printRandomNumber(); 
     } 
    system("pause"); 
    } 
1

這是因爲你的隨機種子是essentialy同樣的工作。你在這裏有兩種解決方案:

  • 你可以把srand(time(0))放在代碼的開頭。這將爲每個循環生成更好的隨機序列。

  • 如果你想讓你的srand(time(0))在main()之外,你可以在你的函數中用代替srand(rand())。這會隨機產生一個隨機種子,導致更好的情況。

相關問題