我需要从1到9的随机数(不含0)。
//numbers 0 to 9
int iRand = rand() % 10;
但我需要1到9岁。
感谢。
答案 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))
我留给你找出正确的语法,因为你听起来像一个非常有能力的开发人员。