据我了解,rand() % a + b
将返回a和b之间的数字,包括a和b。我必须误解这一点,因为当我运行下面的代码int r
将返回2,3或4.我当然希望它返回2或3.我正在调用{{ 1}}在主要和我使用
srand(time(NULL));
和#include <time.h>
我错过了什么吗?
#include <stdlib.h>
答案 0 :(得分:8)
据我了解,
rand() % a + b
将返回a
和b
之间的数字,包括a
和b
。
没有。这将导致b
和(a+b-1)
之间的数字,包括。
rand() % a
的值范围为0
和a-1
,包括。
因此,rand() % a + b
的值范围为b
和(a-1+b)
,包括。
要获得a
和b
之间的随机值,请使用:
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 + b
到a - 1 + b
。
要获得介于2和3之间的值,请使用:
int r = (rand() % 2) + 2;
以下rand()
函数提供从0
到2 - 1
的数字,即1
。当您为每个数字添加2时,您获得的范围为0 + 2
,即2 {到2 - 1 + 2
,即3。