C++中沒有自帶的random函數,要實現隨機數的生成就須要使用rand()和srand()。不過,因爲rand()的內部實現是用線性同餘法作的,因此生成的並非真正的隨機數,而是在必定範圍內可看爲隨機的僞隨機數。html
Rand
單純的rand()會返回一個0至RAND_MAX之間的隨機數值,而RAND_MAX的值與int位數有關,最小是32767。不過rand()是一次性的,由於系統默認的隨機數種子爲1,只要隨機數種子不變,其生成的隨機數序列就不會改變。ios
其實,對於rand()的範圍,咱們是能夠進行人爲設定的,只須要在宏定義中定義一個random(int x)函數,就能夠生成範圍爲0至x的隨機數值。固然,也能夠定義爲random(a,b),使其生成範圍爲a至b的隨機數值。具體定義方法在通式部分。markdown
Srand
srand()可用來設置rand()產生隨機數時的隨機數種子。經過設置不一樣的種子,咱們能夠獲取不一樣的隨機數序列。能夠利用srand((unsigned int)(time(NULL))的方法,利用系統時鐘,產生不一樣的隨機數種子。不過要調用time(),須要加入頭文件< ctime >。dom
示例以下:函數
#include<iostream> #include<cstdlib> #include<ctime> using namespace std; int main() { srand((unsigned)time(NULL)); for(int i=0;i<10;i++) cout<<rand()<<' '; return 0; }
通式
產生必定範圍隨機數的通用表示公式是:post
- 取得(0,x)的隨機整數:rand()%x;
- 取得(a,b)的隨機整數:rand()%(b-a);
- 取得[a,b)的隨機整數:rand()%(b-a)+a;
- 取得[a,b]的隨機整數:rand()%(b-a+1)+a;
- 取得(a,b]的隨機整數:rand()%(b-a)+a+1;
- 取得0-1之間的浮點數:rand()/double(RAND_MAX)。
示例以下:ui
#include<iostream> #include<cstdlib> #include<ctime> #define random(a,b) (rand()%(b-a+1)+a) using namespace std; int main() { srand((unsigned)time(NULL)); for(int i=0;i<10;i++) cout<<random(1,100)<<' '; return 0; }