簡體   English   中英

C ++生成隨機數-1

[英]C++ generating random numbers-1

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個隨機數,我該怎么辦?

模運算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

也看一下:
生成范圍內的隨機數?
在整個范圍內均勻生成隨機數
在C ++中生成隨機數的最佳方法是什么?

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

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

rand() % 10通常對我有用。.(除非我丟失了某些東西)

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; 
  } 
} 

這類問題已經被回答了n次。

看看這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM