2009-06-11 8 views
0

私はちょうどC++に潜入しています。私は乱数ジェネレータを作ることにしました(乱数はどれくらいですか、本当に関係ありません)。コードの大部分はネットからコピーされますが、私の初心者の目はこれで間違ったものを見ることはできません。毎回 "6"以外の数字を与えるためにこれを微調整する方法はありますか?乱数発生器の何が問題なのですか?

#include <iostream> 
#include <string> 
#include <cstdlib> 

using namespace std; 
int random_number(int min, int max) 
{ 
    srand((unsigned)time(0)); 
    int random_num; 
    int range=(max-min)+1; 
    random_num = min+int(range*rand()/(RAND_MAX + 1.0)); 
    return random_num; 
} 
int main() 
{ 
    for(int i =0;i < 100;i++) 
    { 
      cout << random_number(3,10) << endl; 
    } 
} 
+2

1回だけシードするとどうなりますか?私。メイン関数のループの前にsrandを移動しますか? – dreamlax

+2

6 ??いいえ、いいえ、乱数は* 4 *でなければなりません - http://xkcd.com/221/ – AviD

答えて

4

は、問題は、あなたがsrand関数毎回を使用することでループ

srand((unsigned)time(0)); 
    for(int i =0;i < 100;i++) 
    { 
     std::cout << random_number(3,10) << endl; 
    } 
4

random_number()内でsrand()を呼び出さないでください。これにより、毎回乱数ジェネレータが再生成されます。 100コールの場合、コールごとに同じシードが得られる可能性が高く、したがって同じ数になります。

2

前にsrand関数を追加します。 CPUは非常に高速で、このコードをすべて1秒間に実行するので、毎回同じシードが得られます。

ループからsrandを移動して、それを1回だけ呼び出します。