holyya.com
2025-09-05 02:01:17 Friday
登录
文章检索 我的文章 写文章
如何使得c++生成的随机数不重复?
2023-07-11 11:58:13 深夜i     --     --
C++ 随机数 不重复 生成 算法

在C++中,通过使用标准库中的random和algorithm库,我们可以轻松地生成随机数。但是,当我们生成大量的随机数时,如何确保它们不会重复呢?本文将介绍三种解决这个问题的方法。

1.种子值设置为时间戳

在C++中,可以使用time(NULL)函数获取当前时间戳。将该时间戳用作随机数生成器的种子值,这样每次运行程序时,生成的随机数序列都会不同。以下是示例代码:


#include <iostream>

#include <cstdlib>

#include <ctime>

int main()

{

  srand((unsigned)time(NULL));

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

  {

    std::cout << rand() % 100 << std::endl;

  }

  return 0;

}

在上面的示例中,srand()函数将当前时间戳用作随机数发生器的种子值。因此,每次运行程序,我们将会得到10个不同的随机数。

2.使用set容器去重

另一种方法是使用set容器,将生成的随机数插入到set中。由于set中的元素是唯一的,这将自动去除重复的元素。下面是示例代码:


#include <iostream>

#include <cstdlib>

#include <ctime>

#include <set>

int main()

{

  srand((unsigned)time(NULL));

  std::set<int> randomNums;

  while (randomNums.size() < 10)

  {

    randomNums.insert(rand() % 100);

  }

  for (auto num : randomNums)

  

    std::cout << num << std::endl;

  

  return 0;

}

在上面的示例中,我们使用while循环和set容器来生成10个不同的随机数。在while循环中,只有当set中的元素数量小于10时才向其中插入一个随机数,因此我们可以确保生成的随机数不会重复。

3.使用shuffle算法

以上两种方法都是在生成每个随机数时防止出现重复。但是,如果我们需要一次生成一批不同的随机数,我们可以使用shuffle算法。shuffle算法随机打乱一个序列,由于打乱是随机的,因此得到的序列中元素的顺序将是随机的。以下是示例代码:


#include <iostream>

#include <cstdlib>

#include <ctime>

#include <algorithm>

int main()

{

  srand((unsigned)time(NULL));

  int randomNums[10];

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

  {

    randomNums[i] = i;

  }

  // 打乱顺序

  std::random_shuffle(randomNums, randomNums + 10);

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

  {

    std::cout << randomNums[i] << std::endl;

  }

  return 0;

}

在上面的示例中,我们首先将一个包含10个元素的数组填充为一个有序序列,然后使用shuffle算法将它们随机打乱。因为shuffle是随机的,所以我们可以确保生成的随机数不会重复。

总结:

本文介绍了三种方法来确保C++中生成的随机数不会重复。在一般情况下,第一种方法足以满足需求。但是,如果需要一次生成一批不同的随机数,则可以使用第二种或第三种方法。

  
  

评论区

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