zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

剑指 Offer 60. n个骰子的点数

2023-02-18 16:35:25 时间

题目:

思路:

【1】如图:

 

 

 

 

 

复杂度分析:

 

 

 

代码展示:

//剑指 Offer 60. n个骰子的点数
public class Offer {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(Method2(3)));
    }

    //思路一:动态规划的思路
    public static double[] Method2(int n){
        //一个骰子有六面,每一面的概率都是1/6
        double[] dp = new double[6];
        Arrays.fill(dp, 1.0 / 6.0);

        //因为第一个骰子的结果已经直接弄出来,所以从第二个开始计算
        for (int i = 2; i <= n; i++) {
            //骰子的个数为n,那么最小值也就是每一面都是1即n,最大值为每一面都是6,即6n,个数为6n-n+1=5n+1
            double[] tmp = new double[5 * i + 1];
            //对于出现结果的计算
            for (int j = 0; j < dp.length; j++) {
                //遍历这个骰子每一面出现的结果
                for (int k = 0; k < 6; k++) {
                    tmp[j + k] += dp[j] / 6.0;
                }
            }
            dp = tmp;
        }
        return dp;
    }
}

 

复杂度分析: