c++ rand()每个数字只使用一次

C++ rand() each number only once

本文关键字:一次 数字 rand c++      更新时间:2023-10-16

我需要rand()之类的东西,但每个数字只需要一次。

在示例中,我有10个"。txt"文件,命名为数字(1-10)。我想读取里面的内容并计算它,但是随机的。

我不想要1.txt -> 2.txt -> 3.txt ->…而是像

这样随机的东西

5.txt -> 4.txt -> 1.txt ->…

每个数字只能出现一次

是否有"简单"的方法来做到这一点?

string Path = "./Questions_Niko/" + random + ".txt"; 

创建一个您想要的数字向量,并使用std::shuffle

然后依次遍历vector

有几种方法。例如,您可以使用标头<algorithm>

中声明的标准算法std::random_shuffle例如

#include <algorithm>
#include <iterator>
//...
int main()
{
   int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
   std::random_shuffle( std::begin( a ), std::end( a ) );
   for ( int i : a )
   {
      //  some stuff
   }
}

另一种方法是使用标准类std::bitset,为已选定的数字在集合中设置相应的位

为每个结果创建一个哈希映射。

std::random_shuffle可能适合您的需要,但是如果您不能或不想这样做,您可以借用mshuffle:

int mix[10];
int swap;
for (i = 9; i >= 0; i--) {
    int j = rand() % i;
    swap = mix[j];
    mix[j] = mix[i];
    mix[i] = swap;
}

假设您先调用了srand(),这将混淆名为mix的数组。它不需要是一个 ints数组

使用srand()将解决您的问题

//Randomize seed
srand(time(NULL));
for(i to size)
    Arr[i]=rand()%size