3

1 から 10 までの乱数を取得したいのですが、実際には機能しますが、ループ中は実際には乱数を取得できません。

int randomNum;
srand ( (unsigned int)time(NULL) );
randomNum = rand() % 10;

私はこことGoogleで解決策を探して何時間も費やしてきましたが、誰も実際に解決していないようです(または、十分に検索しなかった可能性があります)。ランダマイザーから取得する値は秒に依存します (他のプログラミング言語のように、ミリ秒やその他のものではありません)。そのため、数値はランダムではありません。

さらに、C のパッケージをダウンロードしたくありません。自分のコードを大学の研究室で実行しているのですが、許可されないからです。

この問題の創造的な解決策を持っている人はいますか? 多分いくつかの数学関数?

4

3 に答える 3

2

乱数ジェネレーターを複数回シードしないでください。コードはおそらくすべて同じ秒内に実行されるため、すべてのクエリがrand同じシードを使用するため、毎回同じ数が得られます。

于 2013-04-05T02:33:10.363 に答える
1

Dave Newman は非常に良い答えを提供します。または、疑似乱数発生器を試すこともできます。たとえば、

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

int main()
{
    int a0; // this value will be our requirement
    int mod = 11; //this is the limit (0 - mod-1), here 10
    int a; // this stores the previous value of a0;
    int i; // loop variable
    int mul=25; //multiplicative factor
    int add=3; // additive factor
    int limit=100; // our limit
    srand ( (unsigned int)time(NULL) ); // initialize the seed
    a0 = rand() % mod;
    for(i=0;i<limit;i++)
    {
        printf("%d\t",a0);
        a = a0;
        a0 = (a * mul + add) % mod;
    }
    putchar('\n');
    return 0;
}

出力::


最初の実行::

2       10      4       3       1       8       0       6       7       9       2       10      4       3       1       8       0       6
7       9       2       10      4       3       1       8       0       6       7       9       2       10      4       3       1       8
0       6       7       9       2       10      4       3       1       8       0       6       7       9       2       10      4       3
1       8       0       6       7       9       2       10      4       3       1       8       0       6       7       9       2       10
4       3       1       8       0       6       7       9       2       10      4       3       1       8       0       6       7       9
2       10      4       3       1       8       0       6       7       9

2 番目の出力::

9       2       10      4       3       1       8       0       6       7       9       2       10      4       3       1       8       0
6       7       9       2       10      4       3       1       8       0       6       7       9       2       10      4       3       1
8       0       6       7       9       2       10      4       3       1       8       0       6       7       9       2       10      4
3       1       8       0       6       7       9       2       10      4       3       1       8       0       6       7       9       2
10      4       3       1       8       0       6       7       9       2       10      4       3       1       8       0       6       7
9       2       10      4       3       1       8       0       6       7

于 2013-04-05T17:23:16.370 に答える