因爲rand的內部實現是用線性同餘法(如果不懂你可以去網上查查)做的,他不是真的隨機數,只不過是因爲其週期特別長,所以有一定的範圍裏可看成是隨機的,rand()會返回一隨機數值,範圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子爲1。rand ()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函數就是srand()
頭文件:<cstdlib>
srand(unsigned int seed) --seed表示隨機數種子
rand()
不顯示調用srand()的話,將默認爲srand(1)。
如何引入變化的種子呢?一般來說,我們會使用time(NULL)或time(0)來表示變化的種子,time(0)的返回的是從1970 UTC Jan 1 00:00到當前時刻的秒數,爲unsigned int類型。當我們在不同時刻運行程序時,就會有不同的隨機數種子,因此就可以得到不同的結果
//srand rand
//rand()%(n-m+1)+m 生成[m,n]之間的隨機數
#include<iostream>
#include<cstdlib> //函數rand srand
#include<ctime> //函數time()
using namespace std;
int main() {
int i,k,num;
//不顯示調用srand()的話,將默認爲srand(1)
//每次調用的時候seed應該不同 否則不管什麼時候調用都返回的隨機數相同
//避免每次手動改變seed值,所以選擇電腦的當前時間爲seed
srand(time(0));
for(k=0; k<4; k++) {
cout<<"第"<<k<<"次:"<<endl;
//srand(time(0));//若這個語句在循環內,則每次隨機數的起點都一樣;得到的隨機數也相同
for(i=0; i<5; i++) {
num=rand();
cout<<num<<endl;
}
}
return 0;
}