📌  相关文章
📜  c++ 1 到 10 之间的随机数 - C++ (1)

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

c++ 1 到 10 之间的随机数

在c++中,生成 1 到 10 之间的随机数有多种方法。下面我们依次介绍这些方法。

方法一:使用rand()
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int randomNumber = rand() % 10 + 1; // 生成 1 到 10 之间的随机数

    cout << "随机数为:" << randomNumber << endl;

    return 0;
}

解释:

  • C++ 中rand()函数用于生成一个伪随机数。
  • 由于rand()函数生成的是从 0 到 RAND_MAX 的整数,所以我们通过对其取模得到 1 到 10 之间的整数。
  • 由于rand()函数的结果是伪随机的,所以它需要一个“种子”来确定初始状态。如果没有指定种子,那么默认使用以当前时间为种子的值。因此,如果每次运行程序的时间相同,那么生成的随机数序列也是相同的。
  • 所以,我们需要先调用srand()函数指定种子,让每一次运行程序时rand()函数生成的随机数序列都不同。

下面是更新后的代码:

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

using namespace std;

int main()
{
    srand(time(NULL)); // 指定seed为当前时间,更新rand()函数的种子
    
    int randomNumber = rand() % 10 + 1; // 生成 1 到 10 之间的随机数

    cout << "随机数为:" << randomNumber << endl;

    return 0;
}
方法二:使用random_shuffle()
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<int> v(10);
    for (int i = 1; i <= 10; ++i) v[i-1] = i;
    random_shuffle(v.begin(), v.end()); // 打乱容器中的元素
    int randomNumber = v.back(); // 取出最后一个元素

    cout << "随机数为:" << randomNumber << endl;

    return 0;
}

解释:

  • 上述代码中,我们创建了一个包含 1 到 10 的整数的vector容器。
  • 然后,使用random_shuffle函数打乱容器中的元素。
  • 最后,取出容器中的最后一个元素,即为生成的随机数。
方法三:使用random_device()
#include <iostream>
#include <random>

using namespace std;

int main()
{
    random_device rd; // 定义一个随机数生成设备
    uniform_int_distribution<int> dist(1, 10); // 定义一个从1到10的均匀分布
    int randomNumber = dist(rd); // 生成一个随机数

    cout << "随机数为:" << randomNumber << endl;

    return 0;
}

解释:

  • 上述代码中,我们定义了一个random_device对象,它是C++11标准定义的随机数发生器设备(一种真正的随机数发生器)。在使用random_device对象时,我们可以省略掉种子部分。
  • 然后,我们定义了一个区间为 [1, 10] 的均匀分布,表示生成的随机数在该区间中等概率出现。
  • 最后,我们调用该分布对象的operator()函数生成一个随机数。
总结

以上三种方法都可以用来生成 1 到 10 之间的随机数,但它们各有优缺点。其中,方法三最为推荐,因为它是C++11标准定义的随机数发生器,具有良好的随机性和可移植性。