algorithm - 如何在给定的区间内生成一个等概率的随机数

标签 algorithm random

我尝试了很多,但无法找到解决这个问题的办法

Function returns numbers in range [1,6] with equal probability. You can use library's rand() function and you can assume implementation of rand() returns number in range number in range [0,RAND_MAX] with equal probability.

最佳答案

我们将分多个步骤进行。

您需要生成一个 [1, 6] 范围内的数字,包括在内。

您有一个随机数生成器,它将生成 [0..RAND_MAX] 范围内的数字。

假设您想要生成 [0..5] 范围内的数字。你可以这样做:

int r = rand();  // gives you a number from 0 to RAND_MAX
double d = r / RAND_MAX;  // gives you a number from 0 to 1
double val = d * 5; // gives you a number from 0 to 5
int result = round(d);  // rounds to an integer

您可以使用该技术因此给定一个 [0, high] 范围,您可以生成一个随机数,除以 RAND_MAX,乘以 ,并对结果进行四舍五入。

您的范围是[1, 6],因此您必须添加另一个步骤。你想生成一个 [0, 5] 范围内的随机数,然后加 1。或者,一般来说,要生成一个给定范围内的随机数,[low, high ],你写:

int r = rand();
double d = r / RAND_MAX;
int range = high - low + 1;
double val = d * range;
result = round(val);

显然,您可以组合其中的一些操作。我只是单独展示它们来说明。

关于algorithm - 如何在给定的区间内生成一个等概率的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119930/

相关文章:

algorithm - 如何检测照片上的物体与照片上的另一个物体有多远?

random - 如何将变异循环转换为功能样式?

algorithm - 在有向图中寻找哈密尔顿路径的随机算法

Java - 如果用户未输入内容,则生成随机用户名

algorithm - (with example) 为什么 KMP 字符串匹配 O(n)。不应该是 O(n*m) 吗?

algorithm - 大规模伪逆

c++ - 如何将线程与容器 C++ 一起使用

java - 如何管理 Wordle Game (JavaFx) 中的重复字母?

vb.net - 为什么随机数序列不一样?

java - % Chance,这段代码高效且正确吗?