rand()产生1个数字太高了?

时间:2017-03-13 15:19:00

标签: c++ random srand

据我了解,rand() % a + b将返回a和b之间的数字,包括a和b。我必须误解这一点,因为当我运行下面的代码int r将返回2,3或4.我当然希望它返回2或3.我正在调用{{ 1}}在主要和我使用 srand(time(NULL));#include <time.h>
我错过了什么吗?

#include <stdlib.h>

3 个答案:

答案 0 :(得分:8)

  

据我了解,rand() % a + b将返回ab之间的数字,包括ab

没有。这将导致b(a+b-1)之间的数字,包括。

rand() % a的值范围为0a-1,包括。

因此,rand() % a + b的值范围为b(a-1+b),包括。

要获得ab之间的随机值,请使用:

auto interval = (b-a+1);
auto result = a + rand() % interval;

答案 1 :(得分:0)

num成为你通过调用rand()得到的任何数字,如果用{3}进行%,则有可能得到0,1,2中的一个。

因此你得到2,3,4:

 int r = (rand() % 3) + 2;

答案 2 :(得分:0)

int r = (rand() % 3) + 2;

rand() % 3将返回一个介于0和2之间的数字。当你为每个数字添加t2时,这意味着它将返回2到4. rand() % a函数通常会返回0到0的值a - 1。执行rand() % a + b后,结果值的范围将从0 + ba - 1 + b

要获得介于2和3之间的值,请使用:

int r = (rand() % 2) + 2;

以下rand()函数提供从02 - 1的数字,即1。当您为每个数字添加2时,您获得的范围为0 + 2,即2 {到2 - 1 + 2,即3。