概率和随机数

Probability and random numbers

本文关键字:随机数 概率      更新时间:2023-10-16

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

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

如果你还需要一把斧头,那么使用 rand((%3。它可以给你 0,1 或 2。
2 代表一把斧头,0 和 1 如上。ifs和其他是显而易见的。

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

如果使用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
}