【问题标题】:C++: How to generate a random number from an array [duplicate]C ++:如何从数组中生成随机数[重复]
【发布时间】:2015-10-19 10:02:16
【问题描述】:

我有一个在猜谜游戏中存储 5 个输入 (int) 的数组。

我想做的是从该数组中生成一个随机数(从存储的五个数字中选择一个),有人可以帮我吗?

我熟悉 rand 函数,但只能在 och 数字范围内选择一个随机数,而不是在 5 个输入之间...

【问题讨论】:

  • 做 yournumber % 5 来构造数组索引。
  • 使用 C++11 你应该使用<random>,而不是旧的rand

标签: c++ arrays random


【解决方案1】:

使用例如std::uniform_int_distribution 获取 0 到 4(含)之间的值并将其用作数组的索引。

【讨论】:

  • 确实如此,但仅从 c++11 开始
【解决方案2】:

假设您的数组对象是int arr[5],那么您可以根据您使用的 C++ 版本使用以下方法之一。

所有版本的 C++:

int random_number = arr[rand() % 5];

请记住,此解决方案存在偏见问题。如果您想通过这种方式实现生成数字的良好分布,请阅读以下对同一问题的回答:https://stackoverflow.com/a/6943003/1289981

C++11 起(最正确的方式):

std::random_device rd;
std::default_random_engine e1(rd());
std::uniform_int_distribution<int> uniform_dist(0, 4);

int random_number = arr[uniform_dist(e1)];

【讨论】:

  • 您的第一种方式存在偏见问题。见here
  • @ChrisDrew 你绝对正确。但这并不意味着这种方式行不通。此解决方案将产生随机生成的数字,但分布非常差。
【解决方案3】:

显然,只需使用随机数生成器从 0,1,2,3,4 生成一个数字并将该数字用作数组中的索引。

rand 是我们通常不鼓励人们使用的东西,因为它不是线程安全的。但是,在您的简单情况下,它应该可以工作。

【讨论】:

    【解决方案4】:

    您可以简单地生成一个从 0 到数组长度 - 1 的随机数 x,然后从中选择第 x 个数。

    类似这样的:

    int x = rand() % 5;
    
    cout << inputs[x]; // here is your value
    

    【讨论】:

      【解决方案5】:

      这听起来像是课程作业,所以没有直接给你答案,你需要遵循的逻辑是-

      生成一个在输入数组范围内的随机数:

      0 to ( [number of inputs] - 1 )
      

      在您的情况下,这将是 0 到 4。 确保将随机数存储到变量中,例如一个名为randonInput的变量

      然后你使用生成的数字从数组中选择,即:

      int randomInput = inputArray[randomNumber];
      

      然后您将随机输入存储在 randomInput 变量中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-17
        • 2022-01-19
        • 1970-01-01
        • 2017-10-07
        • 2014-11-10
        • 2023-03-30
        • 2016-08-20
        • 2011-12-28
        相关资源
        最近更新 更多