C ++生成随机数-1

时间:2012-03-01 11:44:43

标签: c++ random netbeans-7 srand

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个随机数,我该怎么办?

5 个答案:

答案 0 :(得分:3)

模运算x % c;x的余数除c。如果您执行x % 10,则可能会有10个返回值:0 1 2 3 4 5 6 7 8 9

请注意,使用带有rand()的{​​{1}}生成随机数会产生偏差结果,并且这些数字不是均匀分布的。 这是一个简单的C风格函数,它从%min的间隔生成随机数,包括:

max

请注意,此函数生成的数字是均匀分布的:

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] << ' ';

另见:
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++?

答案 1 :(得分:0)

您似乎需要完全理解,然后修改此行

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

答案 2 :(得分:0)

rand() % 10通常会为我做诀窍..(除非我遗漏了什么)

答案 3 :(得分: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; 
  } 
} 

答案 4 :(得分:0)

此类问题已被多次回答。

查看this