Axo*_*xoy 5 c++ random c++11 c++17
我有:
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> probability(0, 100);
Run Code Online (Sandbox Code Playgroud)
我想排除这个概率范围内的一些数字。
示例 1:假设我想生成一个 0 到 100 之间的随机数,但这个数字永远不可能是 4。
示例 2:假设我想生成一个 0 到 100 之间的随机数,但这个数字永远不可能是4。 4 到 7 之间的任意数字。
我想知道是否可以在现代 C++ 中实现而不使用std::rand
?
for*_*818 10
如果你想继续使用 a,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;
Run Code Online (Sandbox Code Playgroud)
示例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;
Run Code Online (Sandbox Code Playgroud)
这可以概括为编写一个函数random_int_between_excluding(int first, int last, std::vector<int> exclude)
,尽管在某些时候遵循 NathanOlivers 的建议并使用 a 会更简单std::discrete_distribution
。
示例2:假设我想生成一个 0 到 100 之间的随机数,但这个数字不能是 4 到 7 之间的任何数字。
这就是std::piecewise_constant_distribution的用途。
std::vector<int> i{0, 4, 8, 101};
std::vector<int> w{ 4, 0, 93};
std::piecewise_constant_distribution<> d(i.begin(), i.end(), w.begin());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
834 次 |
最近记录: |