C++ で乱数を生成する方法: ここでは rand() 関数と srand() 関数が使用されますが、C++ には組み込みの乱数 (int 数値) 関数がありません。
(1) 範囲を設定せずに乱数を生成したいだけの場合は、 rand() を使用するだけです。 rand() は 0 から RAND_MAX までの範囲のランダムな値を返します。RAND_MAX 値は少なくとも 32767 です。
例えば:
#include<stdio.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{ for(int i=0;i<10;i++) cout << rand() << endl; }
(2) 特定の範囲内の数値をランダムに生成したい場合、
例: 0 から 99 までの 10 個の数値をランダムに生成します。
#include<stdio.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{ for(int x=0;x<10;x++) cout << rand()%100 << " "); }
つまり、a~b の範囲で乱数を生成するには、 a+rand()%(b-a+1) を使用できます。
(3)ただし、上記 2 つの例を複数回実行すると、出力結果は初回と同じになります。この利点はデバッグが容易になることですが、乱数の意味が失われます。実行ごとに異なる乱数を生成したい場合は、srand() 関数を使用します。srand() は、 rand() が乱数を生成するときに乱数シードを設定するために使用されます。rand() 関数を呼び出して乱数を生成する前に、まず srand() を使用して乱数シード (シード) を設定する必要があります。乱数シードが設定されていない場合、rand() は乱数シードを自動的に 1 に設定します。いわゆる。上記の 2 つの例は、乱数シードが設定されていないためであり、乱数シードは毎回自動的に同じ値 1 に設定され、その結果、 rand() によって生成される乱数値は同じになります。
srand() 関数定義: void srand (unsigned int seed);
通常、geypid() または time(0) の戻り値をシードとして使用できます。time(0) を
使用する場合は、ヘッダー ファイル #include< を追加する必要がありますtime.h >
たとえば:
#include<stdio.h>
#include<time.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{ srand((unsigned)time(NULL)); //srand((unsigned)time(0)) srand((int)time(0) 均可for(int i=0;i<10;i++) cout << rand() << endl; }
このように、実行するたびに結果が異なります。!