我尝试了很多但无法解决此问题
函数
[1,6]以相等的概率返回范围内的数字。您可以使用库的rand()函数,并且可以假设rand()在范围内[0,RAND_MAX]以相等的概率实现范围内的返回数。
我们将分多个步骤执行此操作。
您需要在 range 中生成一个数字[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
Run Code Online (Sandbox Code Playgroud)
您可以使用该技术 给定范围[0, high],您可以生成一个随机数,除以RAND_MAX,乘以high,然后舍入结果。
您的范围是[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);
Run Code Online (Sandbox Code Playgroud)
显然,您可以组合其中一些操作。我只是单独展示了它们来说明。