在我的節目以外的號碼,我一定要找到兩個隨機值有一定的條件:蘭特()的範圍內返回範圍
i
需求爲int範圍[2...n]
k
需要在範圍之內[i+2...n]
所以我這樣做:
i = rand() % n + 2;
k = rand() % n + (i+2);
但它一直給我錯誤的值就像
爲n = 7
我得到i = 4
和k = 11
或i = 3
和k = 8
我該如何解決這個問題?
在我的節目以外的號碼,我一定要找到兩個隨機值有一定的條件:蘭特()的範圍內返回範圍
i
需求爲int範圍[2...n]
k
需要在範圍之內[i+2...n]
所以我這樣做:
i = rand() % n + 2;
k = rand() % n + (i+2);
但它一直給我錯誤的值就像
爲n = 7
我得到i = 4
和k = 11
或i = 3
和k = 8
我該如何解決這個問題?
謝謝,解決了我的問題! – Meryem
我只是盡我的責任 –
正如評論所說,你的距離數學是關閉的。
您可能會發現使用函數每次一致地運算數學是有用的。例如:
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);
這是一個簡單的數學。 'rand()%n + 2'會給你'[0..n-1] + 2 = [2..n + 1]'。我相信你可以從這裏開始。 –
'rand()%N + A'會給你一個在[A,A + N [',不是[A,N ['。你想要的可能是'rand()%(n-2)+ 2',例如 – KABoissonneault
這不是一個C或者甚至是編程問題,而是基礎數學。 – Olaf