2012-03-01 198 views
0
int main() 
{ 
    srand((unsigned)time(0)); 
    int random_integer; 
    int lowest=0, highest=10; 
    int range=(highest-lowest)+1; 
    for(int index=0; index<20; index++){ 
    random_integer = (rand() % range) + lowest/(RAND_MAX + 1.0); 
    cout << random_integer << endl; 
    } 
} 

我得到的输出从0到10,11数字,但我不想得到数字10,只是数字0到9,这意味着10个随机数字,应该是什么我做?C++生成随机数-1

+1

删除范围评估中的“+ 1”。 – Alexander 2012-03-01 11:47:54

+2

将'highest = 10'改为'highest = 9'?我不会以任何其他方式更改代码,因为您的变量给人的印象是它应该给出“最高”的10个数字......如果遵循亚历山大的建议,这将不再适用。 – Rookie 2012-03-01 11:48:35

+0

可能的重复[从一个范围生成随机整数](http://stackoverflow.com/questions/5008804/generating-random-integer-from-a-range) – Mark 2012-03-01 11:49:25

回答

3

模操作x % c;回报x除以c的余数。如果你做x % 10那么有10可能的返回值:0 1 2 3 4 5 6 7 8 9

请注意,使用rand()%生成随机数会产生偏斜结果,而且这些数字不是均匀分布的。 下面是简单的C形式的函数从所述间隔从minmax生成随机的数字,包括端值:

int irand(int min, int max) { 
    return ((double)rand()/((double)RAND_MAX + 1.0)) * (max - min + 1) + min; 
} 

。注意,通过这个功能生成的数字均匀地分布:

int occurences[8] = {0}; 

srand(time(0)); 
for (int i = 0; i < 100000; ++i) 
    ++occurences[irand(1,7)]; 

for (int i = 1; i <= 7; ++i) 
    cout << occurences[i] << ' '; 

输出: 14253 14481 14210 14029 14289 14503 14235

也看看:
Generate a random number within range?
Generate random numbers uniformly over an entire range
What is the best way to generate random numbers in C++?

+0

没关系,但你期望得到的是8个随机数还是7个......因为我的问题是关于我得到的数字的数量......我应该从最低的数字中得到10个数字0和最高的是10 ... – 2012-03-01 11:55:58

+1

@visanio_learner:如果你像这样调用我的函数:'irand(0,3)',则有4个可能的返回值:'0,1,2,3'。希望现在清楚;) – LihO 2012-03-01 11:58:24

+0

是的,我知道了@LihO – 2012-03-01 12:04:54

0

看来,你需要充分了解,然后修改此行

random_integer = (rand() % range) + lowest/(RAND_MAX + 1.0); 
0

rand() % 10通常的伎俩对我..(除非我失去了一些东西)

0
int main() 
{ 
    srand((unsigned)time(0)); 
    int random_integer; 
    int lowest=0, highest=9; 
    int range=(highest-lowest)+1; 
    for(int index=0; index<20; index++){ 
    random_integer = (rand() % range) + lowest; 
    cout << random_integer << endl; 
    } 
} 
0

这种类型的问题已经回答了n次。

看看this