【问题标题】:Probability and random numbers概率和随机数
【发布时间】:2017-11-26 08:33:39
【问题描述】:

我刚从 C++ 开始,正在创建一个简单的基于文本的冒险。我试图弄清楚如何进行基于概率的事件。例如,当你打开盒子时,有 50% 的几率会出现一把剑,有 50% 的几率会出现一把刀。我知道如何制作一个随机数生成器,但我不知道如何将该数字与某事联系起来。我创建了我想要的变体,但它需要用户输入随机数。我想知道如何将 if 语句基于随机数是否大于或小于 50,而不是用户输入的数字是否大于或小于 50。

【问题讨论】:

    标签: c++ random probability


    【解决方案1】:

    将剩余运算符 % 与 rand 一起使用。 rand()%2 可以给你 0 或 1。 让 0 为剑,1 为刀。

    如果您还需要斧头,请使用 rand()%3。 它可以给你 0,1 或 2。
    2 代表斧头,0 和 1 同上。 那么 if 和 else 就很明显了。

    rand()%n 其中 n 是一个大数字,给您较小数字的可能性更高。概率不是均匀分布的。您可以从 stl 或 boost 中查看一些随机数生成器。

    【讨论】:

      【解决方案2】:

      如果您使用rand(),它会生成0..RAND_MAX 范围内的数字。因此,对于 50% 的概率,您可以执行以下操作:

      #include <stdlib.h>
      
      if (rand() < RAND_MAX / 2)
      {
          // sword - 50% probability
      }
      else
      {
          // knife - 50% probability
      }
      

      您显然可以将其扩展到两个以上不同的情况,每种情况具有任何给定的概率,只需在0..RAND_MAX 范围内为每种情况定义适当的阈值,例如

      int r = rand();
      
      if (r < RAND_MAX / 4)
      {
          // sword - 25% probability
      }
      else if (r < 3 * RAND_MAX / 4)
      {
          // knife - 50% probability
      }
      else
      {
          // axe - 25% probability
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 2018-07-11
        • 2013-12-18
        • 2018-01-09
        • 2017-05-16
        • 2011-12-25
        • 2011-03-02
        相关资源
        最近更新 更多