21xrx.com
2024-12-22 20:13:36 Sunday
登录
文章检索 我的文章 写文章
如何使用C++生成不重复的随机数?
2023-07-12 11:07:32 深夜i     --     --
C++ 随机数 不重复 生成

在C++中,如果需要生成随机数,使用random库是一种常见的方式。但是,生成的随机数有可能会重复,因此我们需要以某种方式来确保所生成的随机数不会重复。下面是一些实现方法,可供参考:

1.使用时间作为种子

在C++中,可以使用time(NULL)函数获得当前时间,把它作为random库生成随机数的种子。这样,每一次运行程序时,种子都不同,每次生成的随机数也就不同。示例代码如下:

~~~c++

#include

#include

#include

using namespace std;

int main(){

   srand(time(NULL)); //使用时间作为种子

   int randomNum=rand()%100; //生成0-100的随机数

   cout<<"随机数是:"< <

   return 0;

}

~~~

2.使用几乎唯一的值作为种子

除了时间外,还有一些几乎唯一的值,比如进程ID、系统时间戳等,也可以作为random库生成随机数的种子。这样每次生成随机数时,种子都不同,避免了随机数重复的问题。示例代码如下:

~~~c++

#include

#include

#include

#include

using namespace std;

int main(){

   srand(getpid()); //使用进程ID作为种子

   int randomNum=rand()%100; //生成0-100的随机数

   cout<<"随机数是:"< <

   return 0;

}

~~~

3.使用打乱的已知序列

我们可以手动构造一个有序的序列,如0~99,然后对序列进行打乱,再逐一取出值作为随机数,可以避免重复。示例代码如下:

~~~c++

#include

#include

#include

#include  //STL库

#include  //STL库

using namespace std;

int main(){

   vector numArr(100);

   srand(time(NULL));

   for(int i=0;i<100;i++){ //构造0~99序列

     numArr[i]=i;

   }

   random_shuffle(numArr.begin(),numArr.end()); //打乱序列

   int randomNum=numArr[0]; //取出第一个数作为随机数

   cout<<"随机数是:"< <

   return 0;

}

~~~

总结:

以上三种方法,每一种方法都有其优势和适用场景。根据实际需求选择合适的方法可以帮助我们生成安全、高质量的随机数。当然,为了防止重复,我们可以采用多种方法的组合,以提高生成随机数的安全性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复