c ++,如何以给定的概率随机选择数字

ash*_*him 5 c++ math

我有 N 个数字 n_1、n_2、...n_N 和相关的概率 p_1、p_2、...、p_N。函数应该以概率 p_i 返回数字 n_i,其中 i =1, ..., N。如何在 C++ 中对其进行建模?
我知道这不是一个困难的问题。但我是 C++ 新手,想知道你会使用什么函数。你会像这样生成 0 到 1 之间的均匀随机数:

((double) rand() / (RAND_MAX+1))
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 5

这与我为这个问题给出的答案非常相似:

改变获得随机数的概率

你可以这样做:

double val = (double)rand() / RAND_MAX;

int random;
if (val < p_1)
    random = n_1;
else if (val < p_1 + p_2)
    random = n_2;
else if (val < p_1 + p_2 + p_3)
    random = n_3;
else
    random = n_4;
Run Code Online (Sandbox Code Playgroud)

当然,这种方法只有在p_1 + p_2 + p_3 + p_4 == 1.0.

这可以通过几个数组和一个简单的循环轻松地推广到可变数量的输出和概率。