21xrx.com
2024-12-23 00:05:48 Monday
登录
文章检索 我的文章 写文章
如何在C++中生成不重复的随机数?
2023-06-27 16:49:22 深夜i     --     --
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的相关操作,才能够生成高效、有效的不重复随机数序列。

  
  

评论区

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