隨機生成數

2021-06-22 21:38:13 字數 953 閱讀 2603

如何用隨機數生成0到n之間的m個不重複的數

1、最直接的方法就是先隨機生成乙個0到n之間的數,判斷這個數是否已被選上,如果以前沒選過,則選上,如果以前已選,則丟棄

[cpp]view plain

copy

print?

void common(int n,int m)  

}  free(randnum);  

}  

void common(int n,int m)

}  }  

void mrand(int n ,int m)

{ srand(time(null));

for (int i=0;i上邊的**雖然簡潔,但是不易懂,我們接下來說明一下

首先是乙個迴圈,這個迴圈確保了輸出的數是不重複的,因為每次的i都不一樣

其次是m個數,在每次迴圈中都會用rand()%(n-i)

再次是如何保證這m個數是等概率取到的

在第一次迴圈中i=0, n-i=n, 則隨機數生成的是0-n-1之間的隨機數,那麼此刻0被取到的概率為 m/n-1

在第二次迴圈中i=1,n-i=n-1,則隨機數生成的是0-n-2之間的隨機數,這時1被取到的概率就和上一次迴圈中0有沒有取到有關係了。假設在上一次迴圈中,沒有取,則這次取到的1的概率為 m/n-2;假設上一次迴圈中,已經取到了,那麼這次取到1的概率為m-1/n-2,所以總體上這次被取到的概率為 (1-m/n-1)*(m/n-2)+(m/n-1)*(m-1/n-2),最後通分合併之後的結果為m/n-1和第一次的概率一樣的

同理,在第i次迴圈中,i被取上的概率也為m/n-1

所以這m個數是等概率取到的

[cpp]view plain

copy

print?

rand srand 隨機生成數

庫函式中系統提供了兩個函式用於產生隨機數 srand 和rand rand函式 標頭檔案 定義函式 int rand void 函式功能 產生隨機數,函式說明 因為rand的內部是用線性同餘法做的,不是真的隨機數,只不過因為其週期特別長,所以在一定範圍內可以看成是隨機的,rand 會返回一隨機值,範...

Excel隨機生成資料

concatenate函式是乙個文字連線函式,非常簡單,和 的效果一樣。concatenate是乙個文字連線函式 語法 concatenate text1,text2,text3.其中text表示乙個個要連線起來的文字。隨機小寫字母 char int rand 25 97 隨機大寫字母 char i...

Excel隨機生成資料

concatenate函式是乙個文字連線函式,非常簡單,和 的效果一樣。concatenate是乙個文字連線函式 語法 concatenate text1,text2,text3.其中text表示乙個個要連線起來的文字。隨機小寫字母 char int rand 25 97 隨機大寫字母 char i...