關於產生隨機數列的重點 自己遇到的問題

2021-06-19 00:52:59 字數 930 閱讀 9682

srand()((unsigned int)time(0));

srand()的形參是unsigned int型別的;

這句話只要寫一次,一般情況下只能寫一次;

隨機數是隨機的數,但計算機不可能產生隨機數,計算機根據你的輸入,再跟乙個演算法就產生乙個特定的序列.只要

你給計算機乙個相同的數,計算機返回的就是乙個特定的數,所以這樣的數叫做偽隨機數.

而srand()(unsigned int par);這就是原型,這就是你給計算機的數.計算機通過rand()返回乙個序列,

假設是,只要給相同的引數, 這個序列是特定的.int a=rand();這時候a=2;所以可以得出只要每次給計

算機不同的數也就是srand(unsigned int pra)也就是給pra是不同的值,我們就可以認為這個序列是隨機的.要想給不

同的值,

最簡單的方法是把系統時間轉化成unsigned給計算機就可以了,因為每時每刻時間都是不同的.這裡要注意,時間是秒為

單位,也就是說你如果srand((unsigned)time(null));

只是在每一秒內取隨rand()的話,因為時間還沒來得及變,它還不是完全隨機的,在下一秒就會換取另一條序列,可以

說是相對的隨機。這牽扯掉內部的東西,只要知道層面上的東西就夠了。現在我來告訴你為什麼你得到了2組一樣的結

果,因為計算機運算的速度是相當快的,你的2次srand()取值操作肯定是在一秒內之間發生的,第一次產生隨機數

後,你又寫了一遍srand((unsigned)time(null)); 相當於根據時間又埋下了種子,而這次埋下的種子和上一次的種子

是完全相同的,所以產生的序列也相同,於是計算機又按順序從頭開始把這條序列中的值取出來,產生了上述結果;

總結,在程式中只要寫一次srand((unsigned)time(null)); 這個很重要,重複呼叫 會出現隨機出來的點數容易相同

關於產生無重複隨機數

思路 有點類似於選擇排序法,只依靠乙個陣列,產生後陣列的最後n位即為所需的n個隨機數。例如,從1 10取3個不重複的隨機數,則初始時 1 2 3 4 5 6 7 8 9 10 進行第一遍隨機,rander在0 n i 1 中選擇,n為10,i為遍數,設得3 1 2 10 4 5 6 7 8 9 3 ...

隨機數的產生

方法 標頭檔案中的rand 函式可以產生乙個閉區間 0,rand max 的均勻隨機數,其中rand max在中被定義為常數32767,嚴格地說,這裡的隨機數是 偽隨機數 因為它是由數學公式計算出來的,不過在演算法領域,多數情況下可以吧她當作真正地隨機數。示例 產生n個區間 1,m 上的隨機數。in...

隨機數的產生

1 隨機數的使用 1 arc4random 比較精確不需要生成隨即種子 使用方法 通過arc4random 獲取0到x 1之間的整數的 如下 int value arc4random x 獲取1到x之間的整數的 如下 int value arc4random x 1 2 ccrandom 0 1 c...