C++ 数组C+的概率+;

C++ 数组C+的概率+;,c++,arrays,random,probability,C++,Arrays,Random,Probability,我有一个数组,包含不同选择的概率。例如: 数组1有{5,3,2,7,1}个值。选项“0”被选中的几率为5/18,选项“1”被选中的几率为3/18。。等等“18”是数组值的总和 这是我的代码(在本例中,我们有8种选择): int i=rand()%sumofvaluesofarray//根据数组大小编辑 int c=0; 整数和=0; 而(c

我有一个数组,包含不同选择的概率。例如:

数组1有{5,3,2,7,1}个值。选项“0”被选中的几率为5/18,选项“1”被选中的几率为3/18。。等等“18”是数组值的总和

这是我的代码(在本例中,我们有8种选择):

int i=rand()%sumofvaluesofarray//根据数组大小编辑
int c=0;
整数和=0;
而(c<8){
sum+=数组[c]
if(i

这都是非工作程序的一部分,但我怀疑问题在于代码的这一部分。有什么问题吗?还有没有更有效地编写此代码的方法?

int i=rand()%size\u数组;
int i = rand() % size_array;
int c = 0;
int sum = 0;
while(c < 8){
    sum += array[c];    // Missing semicolon
    if(i < sum){
    choice = c;
    break;
    }
    c += 1;
}
int c=0; 整数和=0; 而(c<8){ sum+=数组[c];//缺少分号 if(i
你漏掉了一个分号。

询问者不断更改代码。未来提问者注意:请在编译代码时准确地发布代码

看来你有几个问题。首先,您应该创建一个最大为
18
的随机数,而不是数组的大小:

int i = rand() % 18;
请注意,这并不一定会根据均匀分布给出
i
(只有当
RAND_MAX
是18的倍数时才会给出)

此外,您将循环
c
最多8次,而它应该是5次:

while(c < 5){
你是不是从文件里抄的?确保它是一个普通的分号字符(U+003B)

如果您使用的是C++11编译器,您可以不再关心如何高效地编写它,只需使用
标题:

std::random_device rd;
std::mt19937 gen(rd());
std::discrete_distribution<> d(std::begin(array), std::end(array));
std::随机设备rd;
标准:mt19937 gen(rd());
离散分布d(std::begin(数组),std::end(数组));

这样,如果您想知道代码中的算法是否正常工作,可以通过调用
d(gen)

根据离散分布生成随机值,将其写入函数并为其创建。通过这种方式,您可以向函数提供一组预定的参数,这些参数可以与预期结果进行比较。现在,当您进入调试会话时,您可以合理地假设函数工作正常,然后可以将精力集中在代码的其他方面。

“问题在于代码的这一部分”。什么问题?请不要继续编辑代码。确保您发布的代码与您正在编译的代码完全一致。有什么问题?你有错误吗?如果是,那是什么?很抱歉编辑了代码。我只是编辑了代码,因为它没有反映我实际编译的代码。我想你可以称之为打字错误。为了更好地理解,我更改了实际代码的变量名,然后将其发布到这里。我编辑了我的问题,以反映您指出的内容。我将“c”最多看8个选项,因为这次我们有8个选项,因此数组[0]-array[7]包含我的8个选项的概率数。我刚开始学习C++,所以我不太熟悉你的第二个建议,尤其是格式化。@ USE2280704,那么问题是什么?你还没告诉我们。如果你有错误,请告诉我们是什么。如果它不符合您的期望,请告诉我们它在做什么。我的问题是调试程序时遇到了问题。这段代码只是我程序的一小部分,我想知道这段代码是否有问题。基本上,我的主要问题是我不确定如何在我的程序中实现概率概念,我要求澄清我是否做对了。@user2280704它工作得好吗?你有没有试过生成许多随机数,并计算每一个随机数的数量?看看它是否匹配你的发行版。这正是我要找的。我有点迷恋如何调试这个程序。它完全符合10000个数字后的分布。谢谢。是的,我就是这么做的,并且发现我的程序的这一部分是有效的。非常感谢。
sum += array[c];
//             ^
std::random_device rd;
std::mt19937 gen(rd());
std::discrete_distribution<> d(std::begin(array), std::end(array));