zoukankan      html  css  js  c++  java
  • [剑指Offer]60-n个骰子的点数

    题意

    输入骰子个数n,打印出所有骰子朝上的点的点数之和,及对应的概率。

    题解

    循环。
    n个骰子,点数之和在n~6n范围内。计算n个骰子扔出和为m的情况数,等于n-1个骰子扔出m-1,m-2...m-6的情况数之和。
    最终=m/6^n。

    代码

    #include <iostream>
    #include <math.h>
    #define MAX_N 10000
    using namespace std;
    
    
    class Solution{
    public:
        void printProbability(int n){
            if(n<=0){
                return;
            }
            
            cptTimes(n);
            for(int i=n;i<=6*n;++i){
                cout<<"总点数:"<<i<<endl;
                cout<<"概率"<<cntNew[i]/pow(6,n)<<endl;
            }
        }
    private:
        long long cnt[6*MAX_N];
        long long cntNew[6*MAX_N];
        void cptTimes(int n){
           for(int k=1;k<=n;++k){
               if(k==1){
                   for(int i=1;i<=6;++i){
                       cnt[i]=1;
                   }
               }
               else{
                   memset(cntNew,0,sizeof(cntNew));
                   for(int i=k;i<=6*k;++i){
                       for(int j=1;j<=6&&i-j>=1;++j){
                           cntNew[i]+=cnt[i-j];
                       }
                   }
                   for(int i=k;i<=6*k;++i){
                       cnt[i]=cntNew[i];
                   }
                   
               }
           }
        }
    };
    
    
    int main(int argc, const char * argv[]) {
        int n;
        cin>>n;
        Solution s=Solution();
        s.printProbability(n);
        return 0;
    }
    
  • 相关阅读:
    uni-app中使用Echarts绘画图表
    css设置Overflow实现隐藏滚动条的同时又可以滚动
    JS判断在哪一端浏览器打开
    ElementUI分页Pagination自动到第一页
    第203场周赛
    TreeSet使用
    155 最小栈
    234 回文链表
    141 环形链表
    2 两数相加
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10621712.html
Copyright © 2011-2022 走看看