(1)、C++標準函數庫提供一隨機數生成器rand(),函數說明:int rand(); 返回[0,MAX]之間均勻分佈的僞隨機整數,這裏的MAX與你所定義的數據類型有關,必須至少爲32767。rand()函數不接受參數,默認以1爲種 子(即起始值)。隨機數生成器老是以相同的種子開始,因此造成的僞隨機數列也相同,失去了隨機意義。(但這樣便於程序調試)
html
#include "stdafx.h" //預編譯頭
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int x = rand();
cout << x << endl;
getchar();
return 0;
}
ios
能夠發現,每次運行程序,rand()獲得的序列值是不變的,都爲41。
ide
(2)、C++中另外一函數srand(),能夠指定不一樣的數(無符號整數變元)爲種子。可是若是種子相同,僞隨機數列也相同。一個辦法是讓用戶輸入種子,可是仍然不理想函數
(3)、比較理想的是用變化的數,好比時間來做爲隨機數生成器的種子。time的值每時每刻都不一樣。因此種子不一樣,產生的隨機數也不一樣。調用srand()函數後,rand()就會產生不一樣的隨機序列數。ui
#include "stdafx.h" //預編譯頭
#include <time.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
srand((unsigned)time(NULL));
int x = rand();
cout << x << endl;
getchar();
return 0;
}
url
能夠發現,每次運行程序,rand()獲得不一樣的序列值:1146,1185,...spa
對上段程序改寫:調試
#include "stdafx.h" //預編譯頭
#include <time.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++){
int x = rand() % 10;
cout << x << endl;
}
getchar();
return 0;
}htm
運行結果:產生0-9之間的10個隨機整數。blog
若是要產生1~10之間的10個整數,則是這樣:int x = 1 + rand() % 10;
總結來講,能夠表示爲:a + rand() % n,其中的a是起始值,n是整數的範圍。
a + rand() % (b-a+1) 就表示 a~b之間的一個隨機數,好比表示3~50之間的隨機整數,則是:int x = 3 + rand() % 48;包含3和50.
更多資料查閱:http://blog.163.com/wujiaxing009@126/blog/static/719883992011113011359154/
http://blog.sina.com.cn/s/blog_4c740ac00100d8wz.html
http://baike.baidu.com/subview/10368/12526578.htm?fr=aladdin&qq-pf-to=pcqq.c2c