C++ 是否在一行中获取两个唯一的数字?
我想确保“grid”不能返回2个相同的值,但我不确定如何返回。这是我的密码:C++ 是否在一行中获取两个唯一的数字?,c++,C++,我想确保“grid”不能返回2个相同的值,但我不确定如何返回。这是我的密码: grid[rnd(2,x-2)*y+rnd(2,y-2)]。高度=rnd(25,40) 我还为rand()添加了srand(time(NULL)) 我希望我能提供更多的细节或者我尝试过的东西,但是我找不到任何与这个主题相关的东西 编辑:我当然可以重新随机,但我觉得这是一种不好的做法:/如果你真的需要避免连续的重复,1你所需要做的就是将上一个值传递到你的函数中,然后在循环中生成随机数,直到它是不同的 伪代码: int r
grid[rnd(2,x-2)*y+rnd(2,y-2)]。高度=rnd(25,40)代码>
我还为rand()添加了srand(time(NULL))代码>
我希望我能提供更多的细节或者我尝试过的东西,但是我找不到任何与这个主题相关的东西
编辑:我当然可以重新随机,但我觉得这是一种不好的做法:/如果你真的需要避免连续的重复,1你所需要做的就是将上一个值传递到你的函数中,然后在循环中生成随机数,直到它是不同的
伪代码:
int rnd(..., int prev) {
int y;
do {
y = rand() ...;
} while (y == prev);
return y;
}
请注意,您也可以将prev
作为函数内的静态变量进行维护。但这将使它无法同时生成多个独立的流
1.这实际上使事情变得不那么“随机”,从更可预测的意义上说。如果你真的需要避免连续重复,1你所需要做的就是将上一个值传递到你的函数中,然后在循环中生成随机数,直到它是不同的
伪代码:
int rnd(..., int prev) {
int y;
do {
y = rand() ...;
} while (y == prev);
return y;
}
请注意,您也可以将prev
作为函数内的静态变量进行维护。但这将使它无法同时生成多个独立的流
1.这实际上使事情变得不那么“随机”,从更可预测的意义上说。(伪)随机性与唯一性是正交的。(伪)随机性与唯一性是正交的。或者洗牌一个唯一的列表并从列表中选择随机值。@KillianDS:确实如此。虽然我的印象是OP只是想避免连续重复,但是像Fisher-Yates这样的方法在这里可能有些过分。或者洗牌一个唯一的列表,然后从列表中随机选取值。@KillianDS:的确如此。虽然我得到的印象是OP只是想避免连续的重复,所以像Fisher-Yates这样的方法可能有点过头了。