等概率生成隨機數問題解析

2021-06-20 20:25:23 字數 679 閱讀 5685

1.rand5()求rand7()問題,等概率問題解決辦法,構造等概率的隨機數範圍讓這個範圍比7的倍數大然後擷取7的倍數那一段除以7取餘如下

int i=0;

while(i<20)

return (i+1)%7;//取出0-24中0-20這一段共21個數改變範圍為1-21除以7取餘即可

解法二:通過矩陣構造出等概率的模7資料列表

int a[5][5]=;

int i;

int j;

int result=7;

while(result==7)

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

intrand5()  

void

main()    

**解釋:

1. 通過 rand5()*5+rand5() 產生 6 7 8 9 10 11 …… 26,27 28 29 30 這25個數,每個數的出現機率相等

2. 只需要前面 3*7 個數,所以捨棄後面的4個數

3. 將 6 7 8 轉化為 1,9 10 11 轉化為 2,……,24 25 26 轉化為 7。公式是 (a-3)/3

等概率隨機數生成器

題目 假設你已經有乙個隨機數生成器,能夠以概率p生成0,概率1 p生成1,請問如何設計演算法以概率q等概率地生成0 6這七個數字中的乙個?即每個數字的概率均為q,q 1 7.我們先從簡單的情況開始考慮,假設需要生成0和1,二者概率均為q。那麼我們可以讓已有的隨機數生成器產生兩個數字,那麼產生的數字及...

C 生成隨機數 生成任意範圍內的等概率隨機數

如果讓你用c 來生成0 n 1之間的隨機數,你會怎麼做?你可能會說,很簡單,看 srand unsigned time null rand n 仔細想一下,這個結果是隨機的嗎 當然,我們不考慮rand 函式的偽隨機性 不是的,因為rand 的上限是rand max,而一般情況下,rand max並不...

生成隨機數函式解析

c 隨機函式生成。有時候,我們需要隨機產生乙個在某範圍的隨機數,c 中rand 函式可以用來產生隨機數,但是是屬於偽隨機數。函式原型 int rand void 標頭檔案 include 返回值 返回乙個 0,rand max 間的隨機整數。其中rand max是定義在stdlib.h標頭檔案中的乙...