c++ - 我可以在现代 C++ 中的随机数范围内排除一个数字或数字子范围吗?
问题描述
我有:
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> probability(0, 100);
我想排除这个概率范围内的一些数字。
示例 1:假设我想生成一个 0 到 100 之间的随机数,但这个数字永远不能是 4。
示例 2:假设我想生成一个 0 到 100 之间的随机数,但这个数字永远不能是4 到 7 之间的任何数字。
我想知道是否可以在不使用现代 C++ 的情况下实现std::rand
?
解决方案
如果你想留下来,uniform_int_distribution
你可以像这样手动进行:
示例 1:假设我想生成一个介于 0 到 100 之间的随机数,但这个数字永远不能是 4。
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> distribution(0,99);
auto temp = distribution(mt);
auto random_number = (temp < 4) ? temp : temp + 1;
示例 2:假设我想生成一个介于 0 到 100 之间的随机数,但这个数字永远不能是 4 到 7 之间的任何数字。
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> distribution(0,96);
auto temp = distribution(mt);
auto random_number = (temp < 4) ? temp : temp + 4;
这可以概括为编写一个 function random_int_between_excluding(int first, int last, std::vector<int> exclude)
,尽管在某些时候遵循 NathanOlivers 的建议并改用 a 会更简单std::discrete_distribution
。
推荐阅读
- php - Composer 包认为我使用的是旧版本的 PHP (OSX)
- python - 无论如何将python期货放入fifo?
- cmd - 命令行管道以匹配输出的第一行
- python - 在 python 的 naughts 和 crosses 游戏中将标记放置在板上的问题
- ibm-watson - 在 Watson Studio 中增加数据的样本量
- ffmpeg - 带有网络摄像头输入和立体输出的 ffmpeg
- c# - 如何更改 XAML 网格背景
- visual-studio - 如何使用 EnvDTE 获得 VC 项目的 /MP 选项?
- javascript - 训练图表项目删除错误
- mysql - 列索引的mysql基数大于该列中的唯一值