已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。
时间: 2024-02-27 22:54:01 浏览: 83
可以使用拒绝采样的方法,即如果生成的随机数大于需要的范围,则拒绝并重新生成,直到生成的随机数在需要的范围内。
具体实现如下:
```
int rand10() {
int num = (rand7() - 1) * 7 + rand7(); // 生成 1 到 49 范围内的随机数
while (num > 40) { // 如果生成的随机数大于 40,拒绝并重新生成
num = (rand7() - 1) * 7 + rand7();
}
return num % 10 + 1; // 将 1 到 40 映射到 1 到 10,并返回
}
```
其中 `(rand7() - 1) * 7 + rand7()` 生成的是 1 到 49 范围内的随机数,可以通过取模将其映射到 1 到 10 范围内。如果生成的数大于 40,则拒绝并重新生成,直到生成的数在 1 到 40 的范围内。这样可以保证生成的数是均匀分布的,并且没有重复的数字。
阅读全文