我编写了以下代码来生成某些数字{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;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
并且实际实施:
int a[] = { 0, 1, 2, ....., 31 };
std::random_shuffle(a, a + 32);
Run Code Online (Sandbox Code Playgroud)
或与矢量:
std::vector<int> v(a, a + 32); // from previous snippet
std::random_shuffle(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
此外,通常情况下,如果您想要真正的随机排列,请不要忘记播种PRNG.