2012-05-02 11 views
0

「グリッド」が2つの同じ値を返すことはできないようにしたいと思いますが、どうすればよいか分かりません。私はより多くの細部または何私が試しを提供することができたい2つの一意の数字を連続して取得しますか?

grid[rnd(2,x-2) * y + rnd(2,y-2)].height = rnd(25,40);

int rnd(int min, int max) { 
    return min + rand() % (max - min + 1); 
} 

私も播種ランド()srand(time(NULL));

と、私は非常に関連する何かを見つけることができませんでした。ここに私のコードですこのトピック。

編集:私は、もちろん再randomingを行うことができますが、それは悪い習慣だような気がします:あなたが本当に連続で繰り返しを避けるために必要がある場合は/

+1

(擬似)ランダム性は一意性と直交します。 – ildjarn

答えて

6

、すべてを行う必要である前の値を渡しますあなたの関数に入れて、別のものになるまでループ内で乱数を生成します。

擬似コード:あなたが代わりに関数内静的変数としてprevを維持することができ

int rnd(..., int prev) { 
    int y; 
    do { 
     y = rand() ...; 
    } while (y == prev); 
    return y; 
} 

注意。しかし、これは複数の独立したストリームを同時に生成することができなくなる。


1.実際には、より予測可能になるという意味で、物事を「ランダム」にしません。

+0

または一意のリストをシャッフルし、リストからランダムな値を選択します。 – KillianDS

+0

@KillianDS:確かに。私はOPが*連続*の重複を避けたいと思っているという印象を受けますが、フィッシャー・イェイツのようなアプローチがここでは過度のものになるかもしれません。 –

関連する問題