2

for ループ内で 1000 個の乱数を生成する必要があります。

私の問題は、生成される乱数が常に同じであることです。タイム NULL を使用してジェネレーターを起動しているので、同じ数値が得られるのはなぜですか? ここに私が使用したコードがあります:

#include <stdio.h>
#include <stdlib.h>
#define LIMIT 30000

int main(){
  int i;
  srand((long) time(NULL));
  for(i = 0; i < 1000; i++){
    int x = rand() % LIMIT;
    printf("%d\n", x);
  }
}
4

2 に答える 2

0

あなたのコードは正しいですが、time.h ライブラリを含めるのを忘れていました。

#include <stdio.h>
#include <stdlib.h>
#include <time.h> // <--- now it works
#define LIMIT 30000

int main(){

  int i;

  srand((long) time(NULL));

 for(i=0;i<1000;i++){

 int x = rand() % LIMIT;
 printf("%d",x);}
于 2013-10-20T17:30:32.987 に答える
0

同じ秒間に複数回プログラムを実行すると、同じ値がシードとしてジェネレーターに渡されます。再試行する前に、少なくとも 1 秒待つ必要があります。

これは、time関数が特定の時間からの秒数を返すためであり、同じ秒の間に複数回呼び出された場合、同じ値が返されます。

于 2013-10-20T14:26:33.117 に答える