生成无连续重复的随机枚举
Generate random enum without consecutive repetition
如何在不连续重复的情况下生成随机枚举值?
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、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
等等…
当您调用从enum
生成随机值的代码时,让它根据上次选择的值检查新的随机值。如果它们相等,请选择另一个值。
这可以在while循环中完成。伪码:
keycode value;
while (value != lastChosen)
value = keycode[random.next];
lastChosen = value;
其中CCD_ 2是最后选择的值。
这将生成介于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;
}
应该很容易根据您的需要采用
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 随机生成一个没有重复元素的枚举数组 (C++)
- 以最新的C 的类型安全方式从枚举中随机选择元素
- 生成无连续重复的随机枚举
- C++ 随机将枚举类型分配给变量
- 如何在 c++ 中从枚举返回随机元素
- 在C++中创建一个具有随机枚举类型的Card对象
- 以常规方式选择有效的随机枚举值