21xrx.com
2025-03-26 15:23:38 Wednesday
文章检索 我的文章 写文章
如何在C++中生成不重复的随机数?
2023-06-27 16:49:22 深夜i     58     0
C++ 生成 随机数 不重复 算法

在C++中生成随机数是很常见的需求,但如果我们希望这些随机数不会重复,该怎么做呢?

首先,我们可以使用rand()函数来生成随机数。rand()函数能够生成0到RAND_MAX(通常为32767)之间的整数值。但是,如果我们不对rand()函数进行任何处理,那么每次运行程序都会得到相同的一组随机数。为了避免这种情况,我们需要使用srand()函数。

srand()函数作用是将随机数发生器初始化,它接受一个参数,该参数指定了随机数发生器的种子值。由于种子值使用时间标记,所以每次运行程序都会得到不同的种子值,代表了一个新的随机数序列。

接下来,我们可以将生成的随机数存储在一个数组或者容器中,然后对其去重。数组可以使用sort函数排序后使用unique函数去重,容器可以使用其内置的去重函数。如下所示:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
  srand((unsigned)time(NULL)); // 初始化随机数发生器
  
  int n = 10;
  vector<int> nums; // 存储随机数的容器
  
  // 生成不重复的随机数
  for (int i = 1; i <= n; i++) {
    int rand_num = rand() % n + 1; // 生成1到n之间的整数
    if (find(nums.begin(), nums.end(), rand_num) == nums.end()) { // 判断是否已经存在于容器中
      nums.push_back(rand_num); // 不存在则插入容器中
    }
  }
  
  // 输出结果
  for (auto i : nums)
    cout << i << " ";
  
  
  return 0;
}

上述代码中,我们使用了vector容器来存储随机数,利用STL中的find函数来判断某个随机数是否已经存在于容器中。如果不存在,则将其插入容器中。最后,我们利用“范围for循环”来遍历容器,输出不重复的随机数。

在实际应用中,我们还可以使用其他容器或者算法来实现这个功能。但不管如何,我们需要理解srand()和rand()函数的基本原理,并且掌握STL的相关操作,才能够生成高效、有效的不重复随机数序列。

  
  

评论区