0

'grid'が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);
}

rand()にもシードしましたsrand(time(NULL));

詳細や試したことを教えていただければと思いますが、このトピックに関連するものは何も見つかりませんでした。

編集:もちろん再ランダム化を行うことはできますが、それは悪い習慣のように感じます:/

4

1 に答える 1

6

連続した繰り返しを本当に避ける必要がある場合は、1必要なのは、前の値を関数に渡し、それが明確になるまでループで乱数を生成することだけです。

擬似コード:

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

prevあるいは、関数内で静的変数として維持することもできることに注意してください。ただし、これにより、複数の独立したストリームを同時に生成できなくなります。


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

于 2012-05-02T20:44:39.257 に答える