C ++随机数1-9

时间:2011-01-06 23:42:20

标签: c++

我需要从1到9的随机数(不含0)。

//numbers 0 to 9
int iRand = rand() % 10;

但我需要1到9岁。

感谢。

6 个答案:

答案 0 :(得分:14)

就是这样:

int iRand = (rand() % 9) + 1;

答案 1 :(得分:6)

嗯,你知道如何获得[0,x]范围内的随机整数,对吧?这是:

rand() % (x + 1)

在您的情况下,您已将x设置为9,为您提供rand() % 10。那你如何操纵范围达到1-9呢?好吧,因为0是这个随机数生成器方案的最小值,我们知道我们需要添加一个至少有一个:

rand() % (x + 1) + 1

现在你得到范围[1,x + 1]。如果假设是[1,9],则x必须为8,给出:

rand() % 9 + 1

这就是你应该如何思考这些事情。

答案 2 :(得分:1)

尝试:

int iRand = 1 + rand() % 9;

它的工作原理是从0到8取一个随机数,然后加一个(尽管我在代码中以相反的顺序编写了这些操作 - 你先做的是个人偏好)。

请注意,%的优先级高于+,因此不需要括号(但可能会提高可读性)。

答案 3 :(得分:1)

初始化随机数生成器调用srand(time(0));然后,将整数x设置为low(包括)和high之间的值(不包括):

int x = int(floor(rand() / (RAND_MAX + 1.0) * (high-low) + low));

如果高和低均为非负值,则无需floor()

对于随机数使用模数(%)是不可取的,因为您不会在低阶位中获得太多变化,因此您会发现非常弱的分布。

答案 4 :(得分:0)

怎么样

int iRand = (rand() % 9) + 1;
几秒钟被打败

答案 5 :(得分:0)

无论选择答案,基于模数的测距都是有偏见的。你可以在互联网上找到它。所以,如果你真的关心它,那么你必须做更多的事情(假设arc4random()返回一个4字节的整数):

#define NUMBER 9.0
#define RANDOM() (((int)(arc4random() / (float)0xffffffff * (float)NUMBER) + 1) % (NUMBER + 1))

我留给你找出正确的语法,因为你听起来像一个非常有能力的开发人员。