c++语言生成一个随机数,C/C++怎么生成“真正的”随机数
C/C++怎么生成“真正的”隨機數
C語言中,直接用rand()函數生成隨機數的話,會出現一個尷尬的局面,那就是每次運行都會生成相同的一個數,這顯然不能滿足我們的期望。怎么回事呢?
不管從哲學上說,還是從技術上說,都難以生成絕對隨機的隨機數,但是我們可以盡可能讓那些“偽隨機數”更像是“真正的”隨機數。
先認識srand()
srand()是隨機數發生器的初始化函數。原型函數是srand(unsigned int seed),通過參數seed改變系統提供的種子值。常用的srand((unsigned)time(NULL))就是根據系統的計時器來改變種子值,time(NULL)是用一套預先設定好的算法計算出的隨機數,會隨著時間變化。
為了清晰地看到seed的值隨時間變化的情形,設計了下面幾行代碼。編譯后多次運行,每次都能輸出一個不同的值。
#include#includeusing namespace std;
int main()
{
int s=(unsigned)time(NULL);
cout<
再說說seed
系統調用rand()之前會先調用srand(),看用戶有沒有給seed一個指定的值。如果有,就用這個值作為產生偽隨機數的初始值,如果沒有,就會用一個固定不變的數作為初始值(這個值與系統有關)。
這就解釋了為什么不用srand()給初始值,或是用了srand()但是給一個定值會導致隨機數不變的問題。簡單的說,只有種子的值變了,隨機數才有可能變化。
回歸正題
現在,我們貌似能夠生成幾個像樣的隨機數了。
#include#include#include#includeusing namespace std;
int main()
{
int a=1,b=50;
srand((unsigned)time(NULL));
for(int i=1;i<=10;++i)
{
int n=a+rand()%(b-a+1);
cout<
上面的代碼將生成十個1到50之間的整數隨機數。
注:怎么讓rand()生成一定范圍內的隨機整數?
簡單說,要生成a到b之間的整數(包含a和b),用a+rand%(b-a+1)就好了。
通俗說,a告訴系統該從哪里開始找隨機數,而b-a+1則表示備選范圍中一共有多少個整數。
結語
我是個初學者。過去是,現在是,以后還是。
博客有兩個目的,一是備忘,雖然是些基礎的知識(或是常識),仍然值得回味。二是因為我的水平較低,想多和大家交流,探討,提升自己的水平。
原創文章,請尊重版權。
總結
以上是生活随笔為你收集整理的c++语言生成一个随机数,C/C++怎么生成“真正的”随机数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言已知斜率 求倾角,倾斜解的问题
- 下一篇: free -m linux,linux中