21xrx.com
2024-12-23 01:28:37 Monday
登录
文章检索 我的文章 写文章
C++生成不重复随机数
2023-06-23 02:35:33 深夜i     --     --
C++ 生成 不重复 随机数

在编程中,生成随机数是一个非常常见的需求。在C++中,使用`rand()`函数可以生成随机数,但是由于该函数生成的随机数是伪随机数,所以会发生重复的情况。下面介绍两种方法来生成不重复的随机数。

方法一:使用标准库` `中的`shuffle()`函数

`shuffle()`函数可以将一个区间内的元素顺序打乱,从而实现生成随机数的效果。代码如下:


#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main()

{

  int n = 10;

  vector<int> nums(n);

  for(int i = 0; i < n; i++)

  {

    nums[i] = i;

  }

  random_shuffle(nums.begin(), nums.end()); // 打乱元素顺序

  for(int i = 0; i < n; i++)

  {

    cout << nums[i] << " ";

  }

  return 0;

}

上述代码通过打乱元素的顺序来实现生成随机数的效果。为了生成不重复的随机数,我们需要保证元素的个数和生成的随机数的个数相等。

方法二:使用` `库中的`srand()`和`rand()`函数

`srand()`函数用来初始化随机数生成器,可以通过调用当前时间戳来实现每次运行时随机数的不同。然后使用`rand()`函数生成随机数。代码如下:


#include <iostream>

#include <ctime>

using namespace std;

int main()

{

  int n = 10;

  int nums[n];

  srand((unsigned)time(NULL)); // 初始化随机数生成器

  for(int i = 0; i < n; i++)

  {

    nums[i] = rand() % n; // 生成随机数

    for(int j = i - 1; j >= 0; j--)

    {

      if(nums[i] == nums[j])

      

        i--; // 如果出现重复

    }

  }

  for(int i = 0; i < n; i++)

  {

    cout << nums[i] << " ";

  }

  return 0;

}

上述代码使用`srand()`函数初始化随机数生成器,并使用`rand()`函数生成随机数。为了生成不重复的随机数,我们在生成随机数时需要检查是否已经生成过该数,如果已经生成过,则重新生成随机数。

总结

本文介绍了使用C++生成不重复随机数的两种方法,分别是使用`shuffle()`函数和使用`srand()`和`rand()`函数。其中,使用`shuffle()`函数适用于需要生成一串随机数的情况,而使用`srand()`和`rand()`函数适用于需要生成较少随机数并保证不重复的情况。

  
  

评论区

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