4

次のコードがあります

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

using namespace std;

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

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

出力は同じ数字が 6 回繰り返されます。数字の組み合わせを出力したいと思います。

4

5 に答える 5

19

毎回同じ値でシード処理を行っているため、time2 番目のレベルの精度しかありませんが、コンピューターはこれらの 6 回のループ反復を 1 秒以内に処理できると確信しています。;-]

プログラムの最初に一度シードします。

于 2012-05-17T22:58:35.160 に答える
3

確かに、ループにかかる時間は1秒未満になるため、通常は毎回srandに同じシードを供給しているからです。

srand 関数は、プログラムの存続期間中に 1 回だけ呼び出す必要があります。

于 2012-05-17T22:58:42.697 に答える
3

srand最初に一度使用する必要があります。考えられる各シードは、特定の疑似乱数のセットに対応し、そのシードが使用されるときは常に同じです。秒単位で行っているため、変更する時間がありません。したがって、毎回同じ数値セットの最初の数値を取得しています。

于 2012-05-17T22:59:28.343 に答える
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");
    }
于 2012-05-19T11:05:19.333 に答える