• 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 }
  • 相关阅读:
    Ubuntu查看端口占用情况
    在jupyter中添加新的环境
    C++指针
    C++排序:冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序
    查找一:C++静态查找
    C++链式队列
    C++顺序循环队列
    C++链式栈
    C++顺序栈
    C++双向循环链表
  • 原文地址:https://www.cnblogs.com/csxcode/p/3739620.html
Copyright © 2020-2023  润新知