c++ - cpp show result 依赖于之前的结果

标签 c++ random

我们有按钮。用户单击按钮并接收 action1action2 取决于变量 percent_to_action2(从 0 到 100)。给他 action1action2 的最简单方法是根据 rand() % 100 并与 percent_to_action2 进行比较。

但问题是,如果。 perfect_to_action = 50 不保证在第一次随机 action1 之后用户将获得 action2(通过 rand())。我正在寻找避免许多重复 Action 的方法。请建议如何根据之前的事件/或所有事件更准确地计数。并附上示例和评论。目标是避免 rund() 可以提供的重复 Action 过多。例如 percent = 50 rand() 可以给出 10/10 action2!

附言。 perfect_to_action 可以随时更改。
附页。对不起我的英语。

我的代码:

                int num_rand = (rand() % 100 ) + 1; // from 1 to 100
                if (  num_rand <= current_percent_to_action2 )
                {
                    // action 1
                } else {} // action2

我想要的示例:

百分比 = 50: action1 比 action2 比 action1 比 action2 等

百分比 = 33: (首先由兰德) 如果第一个action1比action1比action2比action1比action1比action2等

最佳答案

static unsigned num_action_1 = 1;
static unsigned num_action_2 = 1;
double bias = double(num_action_2)/num_action_1;
double randomchance = 1.0-current_percent_to_action2/100.0;
double action_1_cutoff = RAND_MAX*randomchance*bias;
if (  rand() <= action_1_cutoff ) {
    // action 1
    ++num_action_1;
} else {
    // action2
    ++num_action_2;
} 

这将使随机性偏向发生频率较低的选项。我还对其进行了更改,以便操作 2 将在大约 current_percent_to_action2 百分比的时间内发生,而不是像您的代码中那样执行操作 1。正如您从这张图表中看到的那样,它增加了很多复杂性,但您获得不平衡结果的可能性要小得多。从长远来看,尽管最终它们最终会完全相同,但两者最终都会连续给出 10 个字符串,这段代码只是开始时更加均匀。

times #1     Even distribution    Biased distribution
    1               50%                  50%
    2               25%                   8.3%
    3               12.5%                 3.125%
    4                6.25%                1.25%
    5                3.13%                0.52%
    6                1.56%                0.22%
    7                0.78%                0.09%
    8                0.39%                0.04%
    9                0.20%                0.02%
    10               0.10%                0.01%

关于c++ - cpp show result 依赖于之前的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10711428/

相关文章:

C++如何将 map 与循环缓冲区混合?

c++ - 定义类的成员函数时包含参数会返回错误

C++:声明一个在头文件中返回字符串的函数?

c - 如何使用 rand 函数使数字在特定范围内?

c++ - C中的内存访问优化

c++ - Xcode 8.3 命令行 C++

MySQL,为列生成随机的42个字符的字符串

c# - Access 数据库的 3 位十六进制生成器

c# - 如何为在线资源生成唯一的文本 ID

python - 如何在 Python 中列出 n 个数字并随机选择任意数字?