2012-03-01 241 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