这次我的问题不是使用线路而是了解它, 我从我的老师那里收到这条线来随机化一个MIN和MAX值之间的数字,它完美地工作,但我试图理解我究竟是怎么回事。 如果有人能一步一步向我解释,我会很高兴(请不要我不是100%确定rand()函数是如何工作的)
谢谢!
int number = (rand() % (DICE_MAX - DICE_MIN +1)) + DICE_MIN; // Randomizing a value between 'DICE_MAX' and 'DICE_MIN' which can be defined on the head of this program.
答案 0 :(得分:4)
函数rand()
生成一个随机(好的,伪随机的)精确数字。从它返回的int
范围很大,因此您需要将其缩放到必要的范围。
假设DICE_MIN
为1
且DICE_MAX
为6
,则需要生成范围[1,6]中的随机整数。范围内有6个数字,DICE_MAX - DICE_MIN + 1 = 6
。因此,无论您从rand()
得到什么整数,rand() % (DICE_MAX - DICE_MIN + 1)
的值都将在[0,5]范围内。将所需范围DICE_MIN
的最小值添加到其中会将范围移至[1,6]。
这是一种非常广泛使用的技术,用于在给定范围内生成随机数。
答案 1 :(得分:-1)
功能:随机数生成器。
包含:stdlib.h
语法:int rand(void);
返回值:函数rand
返回生成的伪随机数
说明:rand
函数生成0
和RAND_MAX
之间的整数(stdlib.h
中定义的符号常量)。标准C规定RAND_MAX
的值必须至少32767
。如果rand
真正随机生成整数,0
和RAND_MAX
之间的每个数字在每次调用rand
时都有相同的选择概率。
举一个掷骰子的例子(六面)。余数运算符%
在此处与rand
结合使用:
rand % 6;
生成0
到5
范围内的整数。这称为缩放。数字6
称为缩放系数。但是,我们需要生成从1
到6
的数字。现在,我们通过将1
添加到结果(1 + rand%6
)来改变生成的数字范围。
一般
n = a + rand() % b;
其中a
是移位值(等于所需连续整数范围内的第一个数字,即下限)且b
相等到期望的连续整数范围的宽度
在提供的
int number = (rand() % (DICE_MAX - DICE_MIN +1)) + DICE_MIN;
DICE_MAX - DICE_MIN +1
是所需宽度,DICE_MIN
是移位值
进一步阅读:Using rand()
。