如何在没有连续重复的情况下生成随机枚举值?
enum keycode {
VK_LEFT = 75,
VK_UP = 72,
VK_RIGHT = 77,
VK_DOWN = 80
};
VK_LEFT,VK_DOWN,VK_UP,VK_RIGHT,VK_DOWN ......
而不是
VK_LEFT,VK_DOWN, VK_UP , VK_UP ,VK_RIGHT ......
答案 0 :(得分:0)
让我们说你的四个值是0,1,2和3.
在{0,1,2,3}中选择一个随机数N0 在{0,1,2,3} \ {N0}中选择一个随机数N1 在{0,1,2,3} \ {N1}中选择一个随机数N2 在{0,1,2,3} \ {N2}中选择一个随机数N3 等等...
答案 1 :(得分:0)
当您调用从enum
生成随机值的代码时,请根据所选的最后一个值检查新的随机值。如果它们相等,请选择其他值。
这可以在while循环中完成。伪代码:
keycode value;
while (value != lastChosen)
value = keycode[random.next];
lastChosen = value;
其中lastChosen
是最后选择的值。
答案 2 :(得分:0)
这将生成1到N之间的K个非重复数:
vector<int> non_repeat(int K, int N)
{
vector<int> res;
int last = 1 + rand() % N;
res.push_back(last);
for(int i=1;i<K;++i)
{
int r = 1 + rand() % (N-1);
if(r>=last) ++r;
res.push_back(r);
last = r;
}
return res;
}
根据您的需要应该相当容易