2017-05-25 134 views
1

在我的節目以外的號碼,我一定要找到兩個隨機值有一定的條件:蘭特()的範圍內返回範圍

i需求爲int範圍[2...n]

k需要在範圍之內[i+2...n]

所以我這樣做:

i = rand() % n + 2; 
k = rand() % n + (i+2); 

但它一直給我錯誤的值就像

n = 7

我得到i = 4k = 11

i = 3k = 8

我該如何解決這個問題?

+1

這是一個簡單的數學。 'rand()%n + 2'會給你'[0..n-1] + 2 = [2..n + 1]'。我相信你可以從這裏開始。 –

+0

'rand()%N + A'會給你一個在[A,A + N [',不是[A,N ['。你想要的可能是'rand()%(n-2)+ 2',例如 – KABoissonneault

+0

這不是一個C或者甚至是編程問題,而是基礎數學。 – Olaf

回答

3

是我在其他程序中使用的精確公式是:

i = min + (rand() % (int)(max - min + 1)) 

Look here for other explanation

+0

謝謝,解決了我的問題! – Meryem

+0

我只是盡我的責任 –

1

正如評論所說,你的距離數學是關閉的。

您可能會發現使用函數每次一致地運算數學是有用的。例如:

int RandInRange(int x0, int x1) 
{ 
    if(x1<=x0) return x0; 
    return rand() % (x1-x0+1) + x0; 
} 

然後用你想要什麼叫它:

i = RandInRange(2,n); 
k = RandInRange(i+2,n);