骰子概率

Dice probability

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

我正在努力研究如何使掷骰子应用程序显示每个结果的百分比机会。例如,单个六面骰子将显示:1=16.6%2=16.6%3=16.6%4=16.6%5=16.6%6=16.6%。

用户将输入骰子的类型(边数n)和要掷骰子的数目(d)。

有人得到一个适用于C++的公式吗?到目前为止,我似乎无法弄清楚/理解我能找到什么。

感谢

EDIT如果可能的话,我也想将结果存储在某种类型的数组中。

void dice_analysis(int dice_sides, int dice_number, float * h2, int precision)
{
     int temp=0;
     int histogram[dice_sides*dice_number];
     //init histogram
     for(int k=0;k<dice_sides*dice_number;k++)
     {
          histogram[k]=0;
     }
     //statistical analysis
     for(int i=0;i<precision;i++)
     {
          temp=0;
          for(int j=0;j<dice_number;j++)
          {
               temp+=( rand()%dice_sides +1 );
          }
          for(int k=0;k<dice_sides*dice_number;k++)
          {
               if(temp==(k+1)){histogram[k]++;}
               //actually histogram[temp]++; look better
          }

     }
     //printing the calculated results
     for(int k=0;k<dice_sides*dice_number;k++)
     {
               cout<<k+1<<":"<<(float)histogram[k]/(precision/100.0f)<<"%"<<endl;
               h2[k]=histogram[k]/(precision/100.0f);
     }

}

骰子分析输出(8,2,x,1000)--->两个8边骰子

1:0%
2:1.5%
3:4.4%
4:3.8%
5:5.7%
6:8.8%
7:9.1%
8:10.2%
9:14%
10:10.2%
11:8.3%
12:7.5%
13:6.8%
14:6%
15:2.8%
16:0.9%

您可以看到,对于两个或多个骰子,"1"是不可能的。此外,"9"最有可能是%14几率。

您可以使用类似的:dice_analysis(8,2,output_array,1000);

std::vector<double> probas;
for(i = 1; i <= num_faces; ++i)
{
    std::cout << i << " = " << 100.0 / num_faces << "%" << std::endl;
    probas.push_back(100.0 / num_faces);
}

编辑矢量内容