C++中的变量之间随机
random between variables in C++?
首先,我仍然是学习编程的初学者。所以请原谅我!
如果我有 4 个布尔值,假设
a[0] = true
a[1] = false
a[2] = false
a[3] = true
我只随机化真实值,我怎么能随机化它们?
例如,由于 a[0] 和 a[3] 为真,我只能随机数 0 或 3。
int random = rand() % 4 + 0;
所以它会从范围 0 到 3 随机。我怎么能只用真正的值来做到这一点?请指导我,谢谢!
对于只有两个可能值可供选择的特定情况,您可以选择一个随机数并检查它是偶数还是奇数:
int random = (rand() % 2) ? 0 : 3;
更一般地说,您可以列出有资格选择的值,然后从该列表中选择一个随机元素:
std::vector<int> choices = { 0, 3, 9, 42 };
int random = choices[rand() % choices.size()];
这是我设法一起烹饪的解决方案。程序循环遍历 bool 数组,并将所有 true 的索引添加到临时数组中。
#include <vector>
#define ARRAY_SIZE 4
int main( char** argv, int argc )
{
bool a[ ARRAY_SIZE ] = { true, false, false, true };
std::vector< int > Available;
for ( int i = 0; i < ARRAY_SIZE; ++i )
if ( a[ i ] )
Available.push_back( i );
int random = Available[ rand() % static_cast< int >( Available.size() ) ];
}
如果我理解正确,您只想选择一个值为真的索引。
两种方法:
- 创建一个只包含真实索引号的数组,并在那里随机选择一个
- 继续随机化你现有的,直到你得到真正的值(不是很好)
因此,在第一种情况下,您将拥有以下内容:
b[0] = 0;
b[1] = 3;
然后,由于有 2 个这样的元素,您可以将随机发生器修改为:
int random = rand() % 2;
正如其他人指出的那样,正确的答案是构建一个合格值的列表,并从该列表中随机选择:
size_t randomInt(size_t min, size_t max) {
static std::random_device rd;
static std::mt19937 eng(rd());
std::uniform_int_distribution<size_t> dist(min,max);
return dist(eng);
}
int a[] = {true, false, false, true};
std::vector<int> eligible;
for(size_t i = 0u; i != 4u; ++i) {
if(a[i])
eligible.push_back(i);
}
auto random = eligible[randomInt(0u, eligible.size() - 1u)];
但是,如果由于某种原因无法预先创建符合条件的值列表,有趣的是,您可以从未知长度的序列中随机选择。因此,如果您确实需要,则可以一次性从数组中选择一个项目:
size_t n = 0u;
size_t random = 0u;
for(size_t i = 0u; i != 4u; ++i) {
if (a[i]) {
if (randomInt(0u, n) == 0)
random = i;
++n;
}
}
相关文章:
- 对于C++随机访问迭代器(矢量迭代器),迭代器之间的差异是如何计算的?
- 尝试查找数组中点之间的最小距离时的随机垃圾输出
- 生成一组随机的 x,y,z 数,它们之间和定义的限制之间具有最小差异
- 从本地工作,但在执行之间的随机端口上没有收到任何内容
- 分布在-DBL_MAX和DBL_MAX之间的随机双打
- 在 C/C++ 中生成介于 2 个限制之间的随机素数
- 生成它们之间有差异的随机坐标
- 我(伪)如何随机生成数字0和1(不是之间)
- 随机选择一个 0 到 8 之间的数字,直到没有数字可以选择,然后重新开始
- C++ - 将 0 到 9 之间的整数设置为特征库矩阵的随机值
- C++中的变量之间随机
- 从隐藏在随机字符之间的文件中提取整数
- C++ 创建一个介于 0.1 和 10 之间的随机小数
- 如何在 c++ 中生成介于 0 和变量之间的随机双精度
- 是否有一个随机函数可以生成 0 到 1 之间的数字
- C++中介于20和30之间的真随机整数
- 从一个0到1之间的随机生成的数字中滚动两个骰子给定次数C++
- 在[0,1)之间随机生成
- 如何在C++中随机生成的应用程序中在数字之间留出空格
- 生成0到1之间的随机实数