剑指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 }