程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> n個骰子的點數

n個骰子的點數

編輯:C++入門知識

把n個骰子扔在地上,所有骰子朝上的一面的點數之和為s。輸入n,打印出s的所有可能的值和出現的概率。

解法一:基於遞歸求骰子點數。

 1 /////////////////基於遞歸求骰子點數/////////////////////////////////////////////////////////
 2 int g_MaxValue = 6 ;//骰子的點數個數
 3 void Probability(int original , int current , int sum , int* pProbabilities)//original表示骰子個數,current表示剩余骰子的個數,sum表示當前和的一種情況,pProbabilities是存儲相同和出現的次數。
 4 {
 5     if (current == 0)
 6     {
 7         pProbabilities[sum - original]++ ;//數組的下標就是當前和減去最小和的值,數組裡存儲的是當前和出現的次數。
 8     }
 9     else
10     {
11         for (int i = 1 ; i <= g_MaxValue ; i++ )
12         {
13             Probability(original , current - 1 , sum + i , pProbabilities);
14         }
15     }
16 }
17 
18 void Probability(int number , int* pProbabilities)
19 {
20     int sum = 0 ;
21     Probability(number , number , sum , pProbabilities);
22 }
23 
24 void PrintProbability(int number)
25 {
26     if (number < 1)
27     {
28         return;
29     }
30     int MaxSum = number * g_MaxValue ;//最大的和
31     int size = MaxSum - number + 1 ;//和的可能情況數
32     int* pProbabilities = new int[size];
33     for (int i = 0 ; i < size ; i++)
34     {
35         pProbabilities[i] = 0 ;//初始化為0
36     }
37     Probability(number , pProbabilities);
38     double total = pow((double)(g_MaxValue) , number);//和的組合情況
39     for (int i = 0 ; i < size ; i++)
40     {
41         double ratio = pProbabilities[i] / total ;//概率
42         cout<< i + number<<" : "<<pProbabilities[i] <<" : "<<ratio<<endl ;
43     }
44 
45 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved