我尝试了很多,但无法找到解决这个问题的办法
Function returns numbers in range
[1,6]
with equal probability. You can use library'srand()
function and you can assume implementation ofrand()
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/