首页 > 其他 > 详细

n个骰子的点数

时间:2014-05-21 20:39:40      阅读:464      评论:0      收藏:0      [点我收藏+]

把n个骰子扔在地上,所有骰子朝上的一面的点数之和为s。输入n,打印出s的所有可能的值和出现的概率。

解法一:基于递归求骰子点数。

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

 

n个骰子的点数,布布扣,bubuko.com

n个骰子的点数

原文:http://www.cnblogs.com/csxcode/p/3739620.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!