21xrx.com
2025-06-27 22:55:38 Friday
登录
文章检索 我的文章 写文章
如何使用C++随机函数rand生成不重复的数?
2023-07-10 07:41:59 深夜i     41     0
C++ 随机函数 rand 不重复 数字生成

C++中的随机函数rand可以生成一系列的随机数,但有时候需要生成不重复的随机数序列,这就需要我们使用一些技巧来达到这个目的。

首先,我们需要了解rand函数的性质。rand函数的随机数序列是固定的,也就是说,无论我们如何调用它,它都会按照相同的顺序产生相同的随机数序列。因此,我们需要手动设置一个随机数种子,让每次产生的随机数序列不同。可以使用time函数返回系统时间作为随机数种子。

其次,我们可以将rand函数生成的数放入一个数组中,然后使用一些算法将这些数打乱,实现不重复的随机数序列。一种常见的打乱算法是洗牌算法,其基本思路是从数组中随机选取一个数,然后将其与数组中的另一个位置交换,重复这个过程直到所有的数都被处理。

以下是一个生成不重复随机数序列的C++代码示例:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
  const int n = 10;
  int arr[n];
  // 设置随机数种子
  srand(time(NULL));
  // 生成随机数序列
  for (int i = 0; i < n; i++)
  {
    arr[i] = i;
  }
  for (int i = 0; i < n; i++)
  {
    int j = rand() % n;
    int tmp = arr[j];
    arr[j] = arr[i];
    arr[i] = tmp;
  }
  // 输出随机数序列
  for (int i = 0; i < n; i++)
  {
    cout << arr[i] << " ";
  }
  cout << endl;
  return 0;
}

在这个示例中,首先我们定义一个长度为n的int型数组,然后使用srand函数设置随机数种子,接着生成初始的随机数序列,随后通过洗牌算法将这些数打乱,最后输出打乱后的随机数序列。

总的来说,使用C++的随机函数rand生成不重复随机数序列并不困难,只需运用好随机数种子和一些算法即可实现。

  
  

评论区