剑指Offer43 n个骰子点数概率

 1 /*************************************************************************
 2     > File Name: 43_Dics.cpp
 3     > Author: Juntaran
 4     > Mail: JuntaranMail@gmail.com
 5     > Created Time: 2016年09月04日 星期日 16时46分00秒
 6  ************************************************************************/
 7 
 8 #define maxNum 6     // 骰子最多为6
 9  
10 #include <stdio.h>
11 #include <math.h>
12 
13 void PrintDics(int number)
14 {
15     if (number < 1)
16         return;
17     
18     int* Probabilities[2];
19     Probabilities[0] = new int[maxNum * number + 1];
20     Probabilities[1] = new int[maxNum * number + 1];
21     
22     
23     for (int i = 0; i < maxNum*number+1; ++i)
24     {
25         Probabilities[0][i] = 0;
26         Probabilities[1][i] = 0;
27     }
28     int flag = 0;
29     for (int i = 1; i <= maxNum; ++i)
30         Probabilities[flag][i] = 1;
31     
32     
33     for (int k = 2; k <= number; ++k)
34     {
35         for (int i = 0; i < k; ++i)
36             Probabilities[1-flag][i] = 0;
37         for (int i = k; i <= maxNum*k; ++i)
38         {
39             Probabilities[1-flag][i] = 0;
40             for (int j = 1; j<=i&&j<=maxNum; ++j)
41                 Probabilities[1-flag][i] += Probabilities[flag][i-j];
42         }
43         flag = 1 - flag;
44     }
45     
46     double total = pow((double)maxNum, number);
47     for (int i = number; i <= maxNum*number; ++i)
48     {
49         double ratio = (double)Probabilities[flag][i] / total;
50         printf("%d: %f\n", i, ratio);
51     }
52     delete[] Probabilities[0];
53     delete[] Probabilities[1];
54 }
55 
56 int main()
57 {
58     int number = 5;
59     PrintDics(number);
60 }

 

posted @ 2016-09-04 21:41  Juntaran  阅读(166)  评论(0编辑  收藏  举报