21xrx.com
2024-11-22 05:57:15 Friday
登录
文章检索 我的文章 写文章
如何使用C++随机函数rand生成不重复的数?
2023-07-10 07:41:59 深夜i     --     --
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生成不重复随机数序列并不困难,只需运用好随机数种子和一些算法即可实现。

  
  

评论区

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