zoukankan      html  css  js  c++  java
  • n个骰子的点数

    把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 }
  • 相关阅读:
    android模拟器上网设置
    20150916自动化测试之Appinum For Android(环境搭建之下载更新安装AndroidSDK包)
    测试部门目标
    grade 错误
    质量保证
    emma覆盖率
    python学习(二)--数据类型
    python学习(一)--python解释器
    fidder从基础到熟练
    这几天帮一个朋友解决了一点小问题(RF的有些小问题及解决过程)
  • 原文地址:https://www.cnblogs.com/csxcode/p/3739620.html
Copyright © 2011-2022 走看看