C語言真正獲取隨機數

2021-06-04 00:52:34 字數 974 閱讀 1525

問題1:怎樣獲得乙個真正的隨機數?要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都一樣。

專家解答:

之所以rand()每次的隨機數都一樣是因為rand()函式使用不正確。各種程式語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值,當序列足夠長,這組數值近似滿足均勻分布。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。這個特性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成乙個偽隨機序列並對資料進行處理;解密時,再利用種子數生成乙個偽隨機序列並對加密資料進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在呼叫rand()函式之前呼叫srand((unsigned)time( null )),這樣以time函式值(即當前時間)作為種子數,因為兩次呼叫rand函式的時間通常是不同的,這樣就可以保證隨機性了。你也可以使用srand函式來人為指定種子數。windows9x/nt的遊戲freecell就允許使用者指定種子數,這樣使用者如果一次遊戲沒有成功,下次還可以以同樣的發牌結果再玩一次。

問題2:我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:

#include

#include

#include

#include

void main()

{for(int i=0;i<100000;i++)

{srand( (unsigned)time( null ) );

cout你可以在程式裡新增標頭檔案time.h,用當前時間作為srand的種子,這樣就能保證每次執行時都能取到不同的隨機數序列。如下:

time_t t;

srand((unsigned) time(&t));

然後就可以用rand()取隨機數了

C語言獲取隨機數

可能大家在程式設計的時候需要電腦來獲取一些隨機的反應,這個時候我們可以使用隨機數,比較常見的是 rand 函式,它可以隨機的產生 0 rand max 的隨機數。rand max 是乙個很大的數字,具體關係到ide和資料型別,我們一般的需要不可能超出它的範圍。下面是乙個例項 include incl...

C 獲取隨機數

這篇文章主要介紹了c 中獲取 生成隨機數的三種方法,本文講解了random 類生成法 guid 類生成法以及rngcryptoserviceprovider 類生成法,需要的朋友可以參考下 隨機數的定義為 產生的所有數字毫無關係.在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.在c 中獲...

c 獲取隨機數

方法一 使用 rand 函式可以獲取,如下。隨機數大小是在0到rand max,值為2147483647,它是在stdlib中定義的,如果我們希望在某個範圍內,可以使用 結合 來實現。但是不難發現,這裡獲得的隨機數是唯一確定的,而不是變化的。所以,如果我們希望獲得變化的隨機數,可以使用下面的方法。方...