【问题标题】: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
}