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標頭檔案中的乙...