C++生成隨機數
阿新 • • 發佈:2021-01-30
C++中生成隨機數常用這兩個函式:
rand()和srand()
rand()函式,生成一個範圍在[0,RAND_MAX]的隨機數,RAND_MAX的值為32767
其中RAND_MAX定義在cstdlib標頭檔案中。
#include <iostream>
using namespace std;
#include <cstdlib>
int main() {
cout << RAND_MAX << endl;
cout << rand() << endl;;
return 0;
}
注意:rand()函式生成的是偽隨機數,故每次執行的結果是相同的。
我們可以用srand((unsigned)time(NULL))的方法產生不同的隨機種子,需要標頭檔案ctime。
#include <iostream>
using namespace std;
#include <ctime>
#include <cstdlib>
int main() {
srand((unsigned)time(NULL));
cout << RAND_MAX << endl;
cout << rand() << endl;;
return 0;
}
產生指定範圍內的隨機數:
可以先使用rand()函式產生一個[0,RAND_MAX]範圍內的隨機數,然後在變換到指定範圍內。
產生[a,b)的隨機數,可以使用 (rand() % (b-a))+a;
產生[a,b]的隨機數,可以使用 (rand() % (b-a+1))+a;
產生(a,b]的隨機數,可以使用 (rand() % (b-a))+a+1;
通用公式:a+rand() % n;
其中:a為範圍起始位置,n為整數的範圍
產生[a,b]的隨機數,可以使用 a+(int)b*rand()/(RAND_MAX+1);
產生[0,1]的浮點數,可以使用 rand()/double(RAND_MAX);
例子
產生500個[0,1]的隨機數:
#include <iostream>
using namespace std;
#include <cstdlib>
#include <ctime>
int main() {
srand((unsigned)time(NULL));
for (int i = 1; i <= 500; i++)
cout << rand()%2 << endl;
return 0;
}