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

4

5 回答 5

3

模运算返回数字除以x % c;的余数。如果这样做,则可能有返回值:.xcx % 10100 1 2 3 4 5 6 7 8 9

请注意,使用rand()with生成随机数%会产生偏斜的结果,并且这些数字不是均匀分布的。这是一个简单的 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

另请参阅:
在范围内生成随机数?
在整个范围内均匀
生成随机数 在 C++ 中生成随机数的最佳方法是什么?

于 2012-03-01T11:49:35.497 回答
0

看来你需要完全理解,然后修改这一行

random_integer = (rand() % range) + lowest/(RAND_MAX + 1.0);
于 2012-03-01T11:48:22.273 回答
0

rand() % 10通常对我有用..(除非我错过了什么)

于 2012-03-01T11:48:28.197 回答
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; 
  } 
} 
于 2012-03-01T11:59:49.093 回答
0

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

看看这个

于 2012-03-01T12:00:05.457 回答