<分区>
Possible Duplicate:
Expand a random range from 1-5 to 1-7
我理解使用拒绝抽样的解决方案,即
public static int rand7() {
while (true) {
int num = 5 * (rand5() - 1) + (rand5() - 1);
if (num < 21) return (num % 7 + 1);
}
}
但我正在考虑另一种解决方案,即 rand5() 被调用 7 次,结果除以 5,但我不确定这是否正确。请让我知道是否是。
public static int rand7() {
int num = rand5()+rand5()+rand5()+rand5()+rand5()+rand5()+rand5();
return num/5;
}
编辑: 看起来生成 1 的概率是 (1/5)^7,但生成 2 的概率是 7*(1/5)^7。它不均匀,因此无法正常工作。