2011-09-17 34 views
1

獲取隨機數我有一個函數getrand100(),它返回一個範圍在1到100之間的隨機數。獲取給定'getrand100()'函數的特定範圍中的隨機數

如何獲得一個範圍內的隨機數1-201-200具有相同的功能?

1-20我可以申請:

if(num>=1 && num <=20) then accept else reject 

但我應該爲1-200範圍呢?

+0

刪除了 「-1」。儘管1-20問題相當微不足道,但1-200還是通過使用分辨率Y的隨機性源(其中X> Y)來生成具有給定分辨率X的良好隨機生成器的更一般問題。不是那麼平凡,意見。 –

回答

5

我建議

1 + getrand100() % 20 

對於第一殼體(20)和

(getrand100()%2)*100 + getrand100() 

對於後者(200)。

5

在C++:

if (getrand100() % 2) return getrand100(); 
else return getrand100() + 100; 

一半將在1-100範圍內(在if語句)和當時的另一半返回一個數字的時候它會在範圍101-返回一個數字200(else聲明)。您也可以(如評論中指出的)執行任何類似的條件,例如getrand100() <= 50

其實,你可以通過做加快你的答案1-20:

return (getrand100() % 20) + 1; 

這樣,您就不必保留拒絕了一系列的解決方案。

+2

或者,如果(getrand100()<= 50)... –

+0

好的亞它是好的答案 –

+0

@DEVANG號我沒有添加'getrand100()%2'。我只是用它來分割獲得'1-100'範圍和'101-200'範圍的可能性。正如我所說的,你也可以使用'getrand100()<= 50'而不是'getrand100()%2'。 – quasiverse

1

下面是一個廣義Las Vegas-Algorithm

getRand(int upperBound){ 
    if (upperBound <= 1) { throw new IllegalArgumentException(); } 
    // TODO: If random set should not start at 1, use another parameter as offset 
    if (upperBound <= 50) { 
    int num = getRand100(); 
    while (num > 100 - 100 % upperBound) { 
     num = getRand100(); 
    } 
    return num % upperBound + 1; 
    } else if (upperBound <= 100) { 
    int num = getRand100(); 
    while (num > upperBound) { 
     num = getRand100(); 
    } 
    return num; 
    } else { 
    return getRand(upperBound/100) * 100 - 100 + getRand(upperBound % 100); 
    } 
} 
1

使用Java像這樣的事情會在必要的範圍內產生randomNumber。


int maxLimit=85; 
Double someNumber = Math.random()*maxLimit; 
int randomNumber=random.intValue(); // return a number from 1 to 85 

你的情況,你可以簡單地除以100的方法的結果,然後乘以Java中的maxLimit(20或200)

1

的一般解。

public static int rand(int min, int max) { 
    int range = max - min + 1; 
    int num = 1; 
    do { 
      num = num * 100 + getrand100(); 
    } while (num <= range); 
    return min + num % range; 
} 

順便說一句寫在iPhone上的代碼是不容易的;)

相關問題