在两个值之间随机化数字的行

时间:2013-11-16 13:24:22

标签: c

这次我的问题不是使用线路而是了解它, 我从我的老师那里收到这条线来随机化一个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.

2 个答案:

答案 0 :(得分:4)

函数rand()生成一个随机(好的,伪随机的)精确数字。从它返回的int范围很大,因此您需要将其缩放到必要的范围。

假设DICE_MIN1DICE_MAX6,则需要生成范围[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函数生成0RAND_MAX之间的整数(stdlib.h中定义的符号常量)。标准C规定RAND_MAX的值必须至少32767 。如果rand真正随机生成整数,0RAND_MAX之间的每个数字在每次调用rand时都有相同的选择概率。

它是如何工作的?

举一个掷骰子的例子(六面)。余数运算符%在此处与rand结合使用:

rand % 6;  

生成05范围内的整数。这称为缩放。数字6称为缩放系数。但是,我们需要生成从16的数字。现在,我们通过将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()