zoukankan      html  css  js  c++  java
  • 剑指offer-面试题60-n个骰子的点数-动态规划

    /*
    题目:
    	计算n个骰子,出现和s的概率。
    */
    #include<iostream>
    #include<cstdlib>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<deque>
    #include<cmath>
    
    using namespace std;
    //将骰子分为1和n-1两堆
    void getProbability(int n){
        //存储上一轮不同的和s,出现的次数,n=1时,各出现1次。
        int pre_probility[6*n+1] = {1,1,1,1,1,1,1};
        //存储当前轮不同的和s,出现的次数
        int probility[6*n+1] = {0};
        //从掷2颗骰子算起,循环到掷n个骰子为止
        for(int i = 2; i <= n; i++){
            //计算不同的和j,出现的次数。j最小为i,最大为6n
            for(int j = i; j < 6*n+1; j++){
                //计算和j出现的次数为第i堆从1~6,和前i-1堆,j-(1~6)出现的次数
                for(int k = 1; k <= 6; k++){
                    //注意j-k,最大为6(i-1),最小为i-1
                    if(j-k <= 6*(i-1) && j-k >= i-1)
                        probility[j] += pre_probility[j-k];
                }
            }
            for(int j = i; j < 6*i+1; j++){
                pre_probility[j] = probility[j];
                probility[j] = 0;
            }
        }
    
        int count = 0;
        for(int i = n; i < 6*n+1; i++){
            count += pre_probility[i];
            cout<<(double)pre_probility[i]/pow(6,n)<<endl;
        }
        cout<<count<<endl;
    
    
    }
    
    
    int main()
    {
        getProbability(3);
    
    }
    

      

  • 相关阅读:
    delphi 焦点定位
    delphi cxgrid 添加分页
    推动力
    python enumerate 函数用法
    Python pass语句作用与用法
    Python 元组知识点
    python 练习多级菜单思路
    一点练习题
    优化mysql服务器
    对自己的忠告
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/12115763.html
Copyright © 2011-2022 走看看