[英]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樣式函數,該函數從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] << ' ';
輸出: 14253 14481 14210 14029 14289 14503 14235
您似乎需要完全了解,然后修改此行
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.