21xrx.com
2024-12-22 18:38:25 Sunday
登录
文章检索 我的文章 写文章
C++生成1-10随机数的方法
2023-07-02 06:58:22 深夜i     --     --
C++ 生成 随机数 1-10 方法

在C++中生成1-10随机数是一项基本任务,这个任务可以使用伪随机数生成器来完成,伪随机数生成器会生成一串看起来随机的数字序列,但实际上是根据一组初始值计算得出的。这里介绍两种C++的伪随机数生成方法来生成1-10随机数。

方法一:使用rand()函数

C++中的rand()函数可以生成伪随机数,这个函数的返回值是一个介于0和RAND_MAX之间的整数。为了生成1-10随机数,我们需要做以下两步:

1. 用rand()函数获得一个介于0和9之间的随机数

2. 将随机数加上1,使其转变为1-10之间的数字

现在我们来看一个例子:


#include <iostream>

#include <cstdlib>

#include <ctime> // 使用时间作为随机数种子

int main() {

  srand(time(0)); // 设置随机数种子为当前时间

  int num = rand() % 10 + 1; // 0~9之间的随机数 + 1 = 1~10之间的随机数

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

  return 0;

}

在上面的例子中,我们使用rand()函数生成一个0到9之间的随机数,接着将其加上1,得到了1-10之间的随机数。

方法二:使用std::random_device和std::mt19937

C++11中提供了一个全新的随机数库,这个库更加简单易用,在生成伪随机数时更加准确。此库提供的random_device函数可以获得真随机数(从硬件上获得熵),如果已经使用完了全部真随机数,那么该库将自动转向伪随机数生成器std::mt19937。std::mt19937是一种周期性非常长的伪随机数生成器,它能够生成非常均衡、非常难预测的数字序列。

为了实现1到10之间的随机数生成,我们可以使用std::uniform_int_distribution类限制std::mt19937生成的数字序列,并且通过std::random_device使得每次生成的伪随机数都不同。


#include <iostream>

#include <random>

int main() {

  std::random_device rd; // 使用random_device作为随机数种子

  std::mt19937 gen(rd()); // 根据随机数种子生成一个生成器

  std::uniform_int_distribution<> dis(1, 10); // 限制生成器的数字序列,使其介于1和10之间

  int num = dis(gen); // 获得1-10之间的一个随机数

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

  return 0;

}

在上面的例子中,我们首先使用std::random_device获得一个基于硬件熵的随机数种子,接着使用std::mt19937生成器生成一个数字序列。限制数字序列的范围为1-10之间的整数集合,最后用std::uniform_int_distribution来获得在我们设定的数字序列中的随机整数。

总结:

以上两种方法都是生成1-10随机数的有效方法,第一个方法可以用在较老的C++标准中,而第二个方法则是新标准C++11中的方法,可以生成更准确的随机数。需要注意的是,如果需要大量生成随机数的话,建议使用第二种方法来生成随机数。

  
  

评论区

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