思路
- 如果是10做7的话,构成
[0-7*n]
大于7的舍弃就可以 - 如果是7做10,还是要构成
[0-10*n]
大于10的倍数舍弃就可以 - 公式
rand_X(),rand_Y(),可以生成[1-x],[1-y]的随机数,(rand_X() - 1) × Y + rand_Y() ==> 可以等概率的生成[1, X * Y]范围的随机数
,(rand7-1)*7+rand7===>[1-49]
那么超出倍数范围的舍弃就可以了
a\b | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
21 | … | … | … | … | … | … | … |
28 | … | … | … | … | … | … | … |
35 | … | … | … | … | … | … | … |
42 | … | … | … | … | … | … | 49 |
int rand10() {
while(1){
int a = (rand7()-1)*7;
int b = rand7();
int c = a+b;
if(c<=40)
return c%10+1;
}
return 0;
}