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;
    }
    
  • 相关阅读:
    如何实现EndNote中的PDF批量导出
    UltraEdit 编译输出中文乱码的解决办法
    史密斯(smith)圆图讲解
    OpenFlow
    网络虚拟化-简介
    java util包概述
    内存四区分析
    理解Java接口
    Ubuntu14.04安装wineqq国际版
    使用注解来构造IoC容器
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10621712.html
Copyright © 2011-2022 走看看