http://www.mitbbs.com/article_t/Quant/31188147.html 基本方法就是產(chǎn)生一串序列 1,4,5,3,2,4 然后前后兩兩劃分為一組,比如(1,4),(5,3),因為總共有5X5 =25種等概率的可能,不能被7整除,可以拿掉4種,這樣剩下21種,編號為#1,#2,...#21 如果出現(xiàn)#1,#2,#3則輸出1,....如果出現(xiàn)#19,#20,#21則輸出7,如果出現(xiàn)了被拿掉的那4種情況則忽略之 |
算法思路是:
1. 通過 rand5()*5+rand5() 產(chǎn)生 6 7 8 9 10 11 …… 26,27 28 29 30 這25個數(shù),每個數(shù)的出現(xiàn)機率相等
2. 只需要前面 3*7 個數(shù),所以舍棄后面的4個數(shù)
3. 將 6 7 8 轉(zhuǎn)化為 1,9 10 11 轉(zhuǎn)化為 2,……,24 25 26 轉(zhuǎn)化為 7。公式是 (a-3)/3
1 int rand7()
2 {
3 int a;
4 while( (a=rand5()*5+rand5()) > 26 );
5 return (a-3)/3;
6 }
2 {
3 int a;
4 while( (a=rand5()*5+rand5()) > 26 );
5 return (a-3)/3;
6 }