0

我想确保“网格”不能返回 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 回答