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

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

    s可能出现的值的范围为:n--6*n

    1.递归思想

    通过递归的思想将n个骰子的点数累加。

    要求出n个骰子的点数和,可以先求出前n-1个骰子的点数和,然后加上第n个骰子的点数;

    递归结束条件:n=1,此时某个点数和出现的次数+1;

    #include <iostream>
    #include <math.h>
    using namespace std;
    
    void pro(int number,int cur,int sum,int *p)
    {
        if(cur==1)
            p[sum-number]++;
        else
        {
            for(int i=1;i<=6;i++)
            {
                pro(number,cur-1,sum+i,p);
            }
        }
    }
    
    void pro(int number,int *p)
    {
        for(int i=1;i<=6;i++)
            pro(number,number,i,p);
    }
    
    void PrintPro(int n)
    {
        if(n<1)
            return;
        int maxnum=6*n;
        int *probability=new int[maxnum-n+1];
        for(int i=0;i<maxnum-n+1;i++)
            probability[i]=0;
    
        pro(n,probability);
    
        int total=pow(6,n);
        for(int i=0;i<maxnum-n+1;i++)
        {
            double ratio=(double)probability[i]/(double)total;
            cout<<i+n<<' '<<ratio<<endl;
        }
        delete []probability;
    }
    
    
    int main()
    {
        PrintPro(5);
        return 0;
    }
  • 相关阅读:
    一些数学证明
    重头再来
    二次函数传参
    神经网络
    准备写点随笔了
    如何做出响应式的页面 (转)
    自适应,响应式,viewport总结
    edm邮件制作规范
    博客园blog模板整理
    git 常用的命令
  • 原文地址:https://www.cnblogs.com/home123/p/7239397.html
Copyright © 2011-2022 走看看