2013-07-19 96 views
-3

我正在努力解决如何让一个骰子滚动应用程序显示每个结果的百分比机会。例如,将会显示单个六面骰子:1 = 16.6%2 = 16.6%3 = 16.6%4 = 16.6%5 = 16.6%6 = 16.6%。Dice概率

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

有没有人有一个适用于C++的公式?我似乎无法解决这个问题/了解到目前为止我能找到的东西。

由于

EDIT我想结果存储在某种形式以及组成的数组,如果这是可能的

+0

你希望每个死能有不同数量的面? – Daniel

+0

是的,每个骰子可以是4,6,8,10或20面 – tim

+1

http://en.wikipedia.org/wiki/Dice#Probability – IdeaHat

回答

1
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); 
    } 


} 

输出for 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);

+0

的攻击几率提高了70%,这看起来很完美,除了当我用1个6方骰子进行尝试时。所有的答案都有点不同,当然它应该都是16.7%? – tim

+0

如果您需要精度,请从1000增加到100000,并将直方图除以1000而不是1000.我添加了阵列输出版本。 –

+0

增加了可定制的精度版本。 –

0
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); 
} 

编辑矢量东西

+1

然而,我没有考虑到你的玩家对最后一位老板 –