http://www.mitbbs.com/article_t/Quant/31188147.html
基本方法就是產生一串序列 1,4,5,3,2,4 然后前后兩兩劃分為一組,比如(1,4),(5,3),因為總共有5X5 =25種等概率的可能,不能被7整除,可以拿掉4種,這樣剩下21種,編號為#1,#2,...#21 如果出現#1,#2,#3則輸出1,....如果出現#19,#20,#21則輸出7,如果出現了被拿掉的那4種情況則忽略之 |
算法思路是: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
1 int rand7() 2 { 3 int a; 4 while( (a=rand5()*5+rand5()) > 26 ); 5 return (a-3)/3; 6 }
|