隨機數的生成
有缺陷的生成方式
生成隨機數可以使用 <stdlib.h> 里的 int rand(void);
函數實現!
注釋:
C語言中還有一個 random() 函數可以獲取隨機數,但是 random() 不是標准函數,不能在 VC/VS 等編譯器通過,所以比較少用。
缺點:
這種隨機數生成方式得到的隨機數往往只有一個不變的數字,那是因為生成隨機數的種子是不變化的導致的!
這個種子在每次啟動計算機時是隨機的,但是一旦計算機啟動以后它就不再變化了。
也就是說,每次啟動計算機以后,種子就是定值了,所以根據公式推算出來的結果(也就是生成的隨機數)就是固定的。
修補方案(重新播種)
以通過使用 <stdlib.h> 中的 void srand (unsigned int seed);
函數來重新播種。
但是,我們還需要一個實時變化的種子,不然每次生成的隨機數還是固定的!那么,什么種子又簡單有能實時變化呢?
當然,<time.h> 中的 time();
函數就很好的滿足了我們的需求!(time()函數這里不多做介紹,有興趣的可以自行學習!)
完整代碼
int a; srand((unsigned)time(NULL)); a = rand();
那么,這里的 int 類型變量 a 獲得的就是一個真正的隨機數,可以隨時間的不同生成不同的數!
進階
rand()%(n-m+1)+m
用於生成一個 m <= 隨機數 <= n 的隨機數。
注解(詳細解釋):
0+m <= rand()%(n-m+1)+m
<= (n-m) + m
作者
SeaYJ
轉載請注明出處!謝謝~