srand((int)time(NULL))用於設定隨機數種子。 rand()%100,產生0-99的隨機數。如果要產生16-59之間的數,妳可以這樣寫:rand()%44+16(這裏44由59-16+1得到)。其他情況與此雷同。
下面是與random有關的兩個問題(來自百度知道):
問題1: 怎樣獲得壹個真正的隨機數?
要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都壹樣。之所以rand()每次的隨機數都壹樣是因為rand()函數使用不正確。各種編程語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的壹組數值,當序列足夠長,這組數值近似滿足均勻分布。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。這個特性被有的軟件利用於加密和解密。加密時,可以用某個種子數生成壹個偽隨機序列並對數據進行處理;解密時,再利用種子數生成壹個偽隨機序列並對加密數據進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。當然,這種完全相同的序列對於妳來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。妳可以在調用rand()函數之前調用srand( (unsigned)time( NULL ) ),這樣以time函數值(即當前時間)作為種子數,因為兩次調用rand函數的時間通常是不同的,這樣就可以保證隨機性了。妳也可以使用srand函數來人為指定種子數。Windows 9x/NT的遊戲FreeCell就允許用戶指定種子數,這樣用戶如果壹次遊戲沒有成功,下次還可以以同樣的發牌結果再玩壹次。
問題2: 我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>
void main()
{
for(int i=0;i<100000;i++)
{
srand( (unsigned)time( NULL ) );
cout<<rand()<<endl;
}
}
解答: 妳的程序是有問題的,妳每產生壹個隨機數之前,都調用壹次srand,而由於計算機運行很快,所以妳每次用time得到的時間都是壹樣的(time的時間精度較低,只有55ms)。這樣相當於使用同壹個種子產生隨機序列,所以產生的隨機數總是相同的。妳應該把srand放在循環外:
srand( (unsigned)time( NULL ) );
for(int i=0;i<100000;i++)
{ //相關語句 }