📜  在 C++ 中的两个数字之间生成随机数(1)

📅  最后修改于: 2023-12-03 15:37:18.682000             🧑  作者: Mango

在 C++ 中的两个数字之间生成随机数

在程序开发过程中,我们经常需要生成随机数来模拟数据或者做一些随机操作。在 C++ 中,我们可以使用 random 头文件中的函数来生成随机数。本文将介绍如何在 C++ 中的两个数字之间生成随机数。

1. 使用 std::rand() 函数

C++ 中通过 std::rand() 函数来生成随机数。该函数生成的是一个从 0 到 RAND_MAX(通常为 32767)之间的随机整数。为了生成在两个数字之间的随机数,我们需要对生成的随机数进行一定的处理。以下是一个示例程序:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
    std::srand(std::time(nullptr));  // 使用时间作为种子
    int a = 10, b = 20;  // 生成在 a 和 b 之间的随机数
    int random_number = std::rand() % (b - a + 1) + a;
    std::cout << random_number << std::endl;
    return 0;
}

上述程序中,我们使用了 std::srand() 函数来设置随机数生成器的种子,使得每次生成的随机数不同。我们将 ab 分别设置为 10 和 20,然后使用 std::rand() % (b - a + 1) + a 来生成 ab 之间的随机数。具体地,我们将 std::rand() 函数生成的随机数对 (b - a + 1) 取模,得到的余数加上 a,就可以得到在 ab 之间的随机数了。

2. 使用 C++11 中的随机数引擎

C++11 中提供了更好的随机数生成方式,可以使用随机数引擎来生成更加高质量的随机数。以下是一个示例程序:

#include <iostream>
#include <random>

int main()
{
    std::random_device rd;  // 使用硬件随机数生成器作为种子
    std::mt19937 gen(rd());  // 使用 Mersenne Twister 引擎
    int a = 10, b = 20;  // 生成在 a 和 b 之间的随机数
    std::uniform_int_distribution<> dis(a, b);
    int random_number = dis(gen);
    std::cout << random_number << std::endl;
    return 0;
}

上述程序中,我们使用了 std::random_device 作为随机数生成器的种子,使用了 Mersenne Twister 引擎来生成随机数。std::uniform_int_distribution<> 类型的对象可以用于生成指定范围内的随机整数,使用 dis(gen) 来生成在 ab 之间的随机数。

3. 总结

本文介绍了 C++ 中两种生成在两个数字之间的随机数的方式,分别是使用 std::rand() 函数和使用 C++11 中的随机数引擎。在实际开发中,我们应该根据具体的应用场景选择适合的方式来生成随机数。