#include<time.h>
rand() 函數(shù):調(diào)用一次隨機產(chǎn)生0-32767間的整形數(shù)。頭文件:#include<stdlib.h>
srand() 函數(shù):定義rand()函數(shù)中seed的值。 C++中使用rand()函數(shù)隨機。然而,rand()產(chǎn)生的并不是真正隨機數(shù),而是偽隨機數(shù),其本質(zhì)是一個周期無限長的數(shù)列,每次調(diào)用rand(),就從該數(shù)列中某個位置開始取值。若程序在一次執(zhí)行中多次調(diào)用rand(),則依次從這個數(shù)列中取值。然而,如果每次開始取值的位置(seed)是一樣的,那么所產(chǎn)生的值是一樣的。為了解決這個問題,就要改變每次開始的位置(seed的值),由于時間是不斷變化的,所以自然想到用time(NULL)/time(0),這樣一來,調(diào)用rand()前,先定義srand(time(0)),就使得每次數(shù)列的開始位置不一樣(也可理解為使用seed計算得到了這個數(shù)列,每次seed不同,數(shù)列不同)。 舉例:#include<iostream>using namespace std;#include<time.h>#include<stdlib.h>void main(){ //A for(int i=0;i<10;i++) { srand(time(NULL)); cout<<time(NULL)<<' '<<rand()<<'/n'; }} 若把srand(time(NULL))
放在循環(huán)里,由于循環(huán)速度很快,時間在秒數(shù)的量級上沒有變化,所以總是用同一個seed對數(shù)列初始化,故多次運行,輸出的隨機數(shù)都是相同的。 seed用time(0)初始化一次就好,置于循環(huán)中達不到產(chǎn)生隨機數(shù)的目的,應(yīng)將其置于A行。
新聞熱點
疑難解答
圖片精選