2013-07-19 128 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

然而,我沒有考慮到你的玩家對最後一位老闆 –