C++中如何產生隨機數
阿新 • • 發佈:2018-12-17
C++中沒有自帶的random函式,要實現隨機數的生成就需要使用rand()和srand()函式,不過,由於rand()的內部是用線性同餘法做的,所以生成的並不是真正的隨機數,而是在一定範圍內可看為隨機的偽隨機數。
~Rand
~Srand
~通式
單純的rand()會返回一個0至RAND_MAX之間的隨機數值,而RAND_MAX的值與int位數有關。最小的是32767。不過rand()是一次性的,因為系統預設的隨機種子為1 ,只要隨機數種子不變,其生成的隨機數列就不會改變。 其實,對於rand()的範圍,我們是可以人為設定的,只要再巨集定義中生成一個random(int x)函式,就可以生成範圍為0~x的隨機數值。當然。也可以定義為random(a,b),使其生成範圍為a到b的隨機數值。具體定義方法在通式部分。
Srand srand()可用來設定rand()產生隨機數的隨機種子。通過設定不同的種子,我們就可以獲取不同的隨機數序列。可以利用srand(unsigned int)(time(NULL))的方法,利用系統始終,產生不同的隨機數種子。不過要呼叫time(),需要加入標頭檔案。 示例如下:
#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; }
產生一定範圍的隨機數的通用表示公式是: 1.取得(0,x)的隨機整數:rand()%x; 2.取得(a,b)的隨機整數:rand()%(b-a); 3.取得[a,b)的隨機整數: rand()%(b-a)+a; 4.取得[a,b]的隨機整數:rand()%(b-a+1)+a; 5.取得(a,b]的隨機整數:rand()%(b-a)+a+1; 6.取得0-1之間的浮點數:rand()/double(RAND_MAX); 示例如下:
#iinclude<iostream> #include<ctime> #include<cstdlib> #define random(a,b) (rand()%(b-a+1)+a) using namespace srd; int main() { srand((unsigned)time(NULL)); for(int i = 0;i < 10;i++) cout << random(1,100); return 0; }