隨機數問題(srand(),rand())

2021-07-14 18:47:40 字數 1165 閱讀 3633

一 如何產生不可預見的隨機序列呢

利用 srand((unsigned int)(time(null)) 是一種方法,因為每一次執行程式的時間是不同的。

在 c 語言裡所提供的隨機數發生器的用法:現在的 c 編譯器都提供了乙個基於 ansi 標準的偽隨機數發生器函式,用來生成隨機數。它們就是 rand() 和 srand() 函式。這二個函式的工作過程如下:

1) 首先給 srand() 提供乙個種子,它是乙個 unsigned int 型別,其取值範圍從 0~65535;

2) 然後呼叫 rand(),它會根據提供給 srand() 的種子值返回乙個隨機數 (在 0 到 32767 之間)

3) 根據需要多次呼叫 rand(),從而不間斷地得到新的隨機數;

4) 無論什麼時候,都可以給 srand() 提供乙個新的種子,從而進一步 「隨機化」rand() 的輸出結果。

通過上面也可以延伸想到,我們可以得到任意區間的隨機數,只需要對區間範圍求模就可以轉換得到,例如:

#include 

#include

#include

int main( )

通過上面的**我們可以得到1到100之間的隨機數,其中srand((unsigned)time( null ) )是以時間為種子,時間是每一時刻都不相同的,因此得到不同隨機數。

二 如何產生不重複的隨機數

此處的乙個想法在之前點陣圖的部落格中有提及,就是把資料i放置在陣列中a[i]中,為了使順序隨機,我們在對隨機選中的兩個元素置換位置。

#include 

#include

#include

swap(int

*pm,int

*pn) /* 必須用指標進行交換 */

int main(void)

for(i=512; i>=1; i--)

swap(&a[i], &a[rand()%i+1]); /* 加一是從一到 i 的隨機,就不會包含 0*/

printf("\n") ;

for(i=1; i<=64; i++)

printf("%4d",a[i] );

getch(); /*wintc 的輸出 */

}

隨機數 簡學 隨機數問題

隨機是概率論用語,指事前不可預言的,即在相同條件下重複進行試驗,每次結果未必相同,或知道事物過去的狀況,但未來的發展卻不能完全肯定,隨機也有 真隨機 與 偽隨機 真隨機 比如量子力學,因為乙個放射性物質原子下一分鐘是否發生衰變是真正隨機的,不可預言的 偽隨機 由經過系統的不同的因素造成,或是由於忽略...

隨機數問題

要產生真正的隨機數還是有難度的!好在vc中提供有隨機數函式,rand 函式。msdn中定義如下 include include include void main void int i seed the random number generator with current time so tha...

隨機數問題

1 隨機數問題 希望掉落2或者4。1 使用std time 函式取得乙個每次都不一樣的時間作為種子數值 2 使用std srand 函式設定這個種子數值初始化隨機數發生器 3 使用std rand 函式根據我們所需要縮放的範圍進行取餘處理製造我們所需要的隨機數 1.1std time 函式 傳入nu...