我正在尝试研究如何使掷骰子应用程序显示每个结果的百分比机会。例如,单个六面骰子将显示:1 = 16.6% 2 = 16.6% 3 = 16.6% 4= 16.6% 5 = 16.6% 6 = 16.6%。
用户将输入骰子的类型(面数 n)和要掷骰子的数量(d)。
有没有人有一个适用于 C++ 的公式?我似乎无法解决/理解到目前为止我能找到的东西。
谢谢
编辑如果可能的话,我也想将结果存储在某种数组中
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);
}
}
dice_analysis(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);
}
编辑矢量素材