连续获得2个唯一数字?

时间:2012-05-02 20:41:12

标签: c++

我想确保'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);
}

我还用srand(time(NULL));

播种了rand()

我希望我能提供更多详细信息或我尝试过的内容,但我找不到与此主题相关的任何内容。

编辑:我当然可以重新随机,但我觉得这是不好的做法:/

1 个答案:

答案 0 :(得分:6)

如果你真的需要避免连续重复, 1 你需要做的就是将前一个值传递给你的函数,然后在一个循环中生成随机数,直到它是不同的。

的伪代码:

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

请注意,您也可以将prev维护为函数内的静态变量。但这会使它无法同时生成多个独立的流。

<小时/> <子> 1。这实际上使事情变得更加“随机”,从而变得更具可预测性。