用Rand7()实现rand10()

  1. 1. 方法一
    1. 1.1. 思路与算法

方法一

思路与算法

现有一个 RandX() 和 RandY() 两个随机数 x ([1,X]) 和 y ([1,Y]),那么让每一位产生一个随机数来生成一个新的数,如 或者 产生一个 [1,X*Y] 的随机数。

现有

采用拒绝采样的方法将生成的随机数缩短到 10k 的区间里问题就解决了

1
2
3
4
5
6
7
public int rand10() {
while(true){
int ans = (rand7() - 1) * 7 + rand7();
if( ans <= 40 )
return 1 + (ans % 10);
}
}