ソードフィンガーオファーインタビュー質問60:n個のサイコロの数

この質問の場合、考えられるアイデアは、直接合計して回数を見つけることです。これは、最も直接的で面倒な方法です。

次に、答えを直接調べました。答えのアイデアは、配列を使用して各サイコロに対応する合計の数を格納し、次回はf(n-1)+ f(n-2)を使用することです。 + f(n-3)+ f(n-4)+ f(n-5)+ f(n-6)は、値と現在のサイコロを取得します

 

 

自分で書いたコード

    public double[] dicesProbability(int n) {
        
        int[] pre_sum = new int[7];
        int[] la_sum = null;
        double total = 1;
        for(int count = 0;count<n;count++){
            total*=6;
        }
        pre_sum[0] = 0;
        pre_sum[1] = 1;
        pre_sum[2] = 1;
        pre_sum[3] = 1;
        pre_sum[4] = 1;
        pre_sum[5] = 1;
        pre_sum[6] = 1;
        la_sum = pre_sum;
        for(int count = 2; count<=n;count++){
            pre_sum = la_sum;
            la_sum = new int[count*6 + 1];
            for(int inner_count = 0;inner_count < la_sum.length;inner_count++){
                for(int count_6 = 1;count_6<=6;count_6++){
                    if(inner_count - count_6>=0&&inner_count - count_6<pre_sum.length){
                        la_sum[inner_count] += pre_sum[inner_count - count_6];
                    }
                }
            }



        }
        double[] la_rate = new double[la_sum.length];
        int num_count = 0;
        for(int count = 0;count<la_sum.length;count++){
            la_rate[count] = la_sum[count]/total;
            if(la_sum[count]>0){
                num_count++;
            }
        }
        double[] la_rate_new = new double[num_count];
        int count_out = 0;
        for(int count = 0;count<la_sum.length;count++){
            if(la_sum[count]>0){
                la_rate_new[count_out++] = la_rate[count];
            }
        }
        return la_rate_new;
    }

 

おすすめ

転載: blog.csdn.net/qq_40473204/article/details/115351383