c++ - 在确定的时间内生成特定数字的随机序列

标签 c++ random

<分区>

我编写了以下代码来生成特定数字 {0,1,2,...,31} 的随机序列。它工作正常,但是不能保证在任何有限的时间内完成;在任何间隔之后,它仍然只有一定(非常高)的概率完成。 有任何消除此问题的建议吗?

int th;
vector<int> V2 = vector<int> (32,0);
for (int k=0;k<32;k++){

    do{
        th = rand() % 32;
    } while ( V2[th] == 0 );

    V2[th] = k;
}

最佳答案

和一个实际的实现:

int a[] = { 0, 1, 2, ....., 31 };
std::random_shuffle(a, a + 32);

或使用 vector :

std::vector<int> v(a, a + 32); // from previous snippet
std::random_shuffle(v.begin(), v.end());

此外,与往常一样,如果您想要真正的随机排列,请不要忘记为 PRNG 播种。

关于c++ - 在确定的时间内生成特定数字的随机序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198459/

相关文章:

C++ 模板可变但静态

c++ - QT Creator 和 OpenCV455 : 'arm_neon.h' file not found

c# - 给定每个项目的概率,从列表中选择随机项目

random - 可以将Fortran 90的随机数生成器用于Monte Carlo集成吗?

c# - 从目录中选择随机文件

arrays - ActionScript 3.0 随机化数组、显示数字并拼接该数字

c++ - 我可以有条件地替换预处理器参数吗?

C++:无法在使用条件类型的模板函数中使用类型为 'char*' 的左值初始化类型为 'double' 的参数

c++ - 如何获取12 :00PM of the day的SYSTEM时间

c - 如何从 10 个字符串的数组中打印 5 个唯一的字符串