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

    /*
    *
    * 面试题43:n个骰子的点数
    * 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。
    * 输入n,打印出s的所有可能的值出现的概率。
    *
    */
    
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    const int max_val = 6;
    
    //核心,计算概率
    //original为起始值,n个骰子起始值为n
    //current为当前骰子个数
    //骰子数之和
    //和对应的次数
    void probalility(int original, int current, int sum, int *probabilities)
    {
        if (current == 1) {
            probabilities[sum - original]++;
        }
        else{
            //每个骰子都有六种可能
            for (int i = 1; i <= max_val; i++) {
                probalility(original, current - 1, i + sum, probabilities);
            }
        }
    }
    //计算概率
    void probalility(int number, int *probabilities)
    {
        for (int i = 1; i <= max_val; i++) {
            probalility(number, number, i, probabilities);
        }
    }
    
    
    void PrintPrabability(int number)
    {
        if (number < 1) {
            return;
        }
        //申请空间
        int max_sum = number * max_val;
        int *probabilities = new int[max_sum];
        for (int i = number; i <= max_sum; i++) {
            probabilities[i] = 0;
        }
        //计算可能的情况
        probalility(number, probabilities);
    
        //计算概率
        int total = pow(double(max_val), number);
        for (int i = number; i <= max_sum; i++) {
            double ratio = (double)probabilities[i - number] / total;
            cout << i << " " << ratio << endl;
        }
    }
  • 相关阅读:
    Javascript调用C#后台方法及JSon解析
    ul 仿 table 循环滚动
    windows服务
    simple demo how to get the list of online users
    IIS 4.0配置
    在线
    C学习笔记-多源文件的编译
    C学习笔记-多源文件的编译
    C学习笔记-函数
    C学习笔记-函数
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8613579.html
Copyright © 2011-2022 走看看