關於隨機數的乙個簡單的整理

2021-05-26 00:02:48 字數 1836 閱讀 4181

隨機函式一些粗淺的基礎,不對的地方請指正

宣告:首先計算機不會產生絕對隨機的隨機數,計算機只能產生「偽隨機數」。而偽隨機數不是假隨機數,「偽」是指有規律的意思,

就是產生的隨機數既是隨機的又是有規律的。產生的偽隨機數有時是有規律的,有時是沒規律的;有一部分是有規律的,有一部

分是沒規律的。

一  有用否?不用咱學它幹嘛?

隨機函式在考試系統中的隨機抽題(這個好討厭啊),撲克遊戲的自動發牌(你可能經常玩的),密碼學(難道夢幻將軍令

就是這麼來的?)等領域都有廣泛應用    當然應用領域還等待後人繼續搞kuo研。

二 隨機函式有哪些?

1.rand()函式

原型: int rand(viod)

功能:產生從0到rand_max(0x7fff)之間的隨機數。

標頭檔案 stdlib.h

資料上說明「當你利用rand()來生成隨機數時,產生的隨機數每次迴圈都是一樣的」而當你輸入以下**時你可能會大罵

寫這樣說明的人腦子進水了,就算他爸是李剛都要暴打他一頓。

#include

#include

int main(void)

system("pause"); 

return 0;

我的編譯器執行後結果是41  18467 6334 26500  19169  你也許會問這不是不一樣嗎?但是關閉程式再執行一次,我發現

結果還是41 18467 6334  26500 19169 我不服氣,又試了n遍,好吧,算你狠,結果還是一樣。     請靜靜地思考   

ok,  now,我想你對那句「每次迴圈都是一樣」的話應該是理解了吧,然而懸念+糾結產生了,我這本來想產生隨機數字的,結果你

產生的不是真正的隨機,不給力啊,怎麼辦?他是幹什麼吃的呢?

簡單的說int rand(void)

它是從srand(seed)中指定的seed開始,返回乙個[seed,rand_max(0x7fff)]間的隨機整數

可以這樣理解  rand()在每次被呼叫的時候,它會檢視

(1)如果使用者在這之前呼叫過srand(seed),給seed指定了乙個值,那麼它會自動呼叫srand(seed)一次來初始化它的起始值

(2)如果使用者在此之前沒有呼叫過srand(seed),它會自動呼叫srand(1)一次

所以,如果我們想得到真正的隨機數,就要讓seed不一樣,這個解決方案先暫時擱置下,先解決srand()函式是神馬東東。

2. srand()函式

原型 void srand(unsigned seed)

功能:產生隨機數的起始發生資料,和rand函式配合使用

標頭檔案:stdlib.h   time.h             

#include

#include

#include

int main(void)

system("pause"); 

return 0;

} 執行第一次19530 24291 26062 1116  111

第二次19641 29288 10852 69    23126

第三次19781 32718 25347 18984 7901

第四次19968 22785 27797 14336 6008    

第五次20088 27260 643   19943 277199

數字是不一樣了,但是我們會發現第1個數 第2數 甚至第三個數都驚人的相近。產生的隨機數其實是「偽」隨機數;

小擴充套件 產生乙個x到y的「偽」隨機整數

只要這樣寫就ok了:

k=rand()%(x-y+1)+x;

乙個簡單的隨機數產生函式

直接先貼上 吧。includenclude const double sample sum 10000000 double random double start,double end 上面這個函式可以產生start到end之間的隨機數,及 start,end 最大值小於end,最小值可以等於sta...

乙個簡單的隨機數方法,支援小數

網上大部分的隨機數方法都是沒有小數的,估計是沒有這個必要吧,因為最近的開發有需要,所以自己動手寫了乙個,下面是我的 第三個引數表示小數有多少位 var random function t1,t2,t3 if t1 isnum t1 if t2 isnum t2 if t3 isnum t3 t3 t...

乙個求隨機數的程式

程式說明 這是乙個求隨機數的程式,隨機數的個數為n,可以手動輸入,因為我定 義的 陣列 是ran 1000 所以我的是產生0 1000內的不重複的隨機數。include include include include include voidrandom num void void main voi...