Para esta pregunta, la idea que se puede pensar es sumar directamente y encontrar el número de veces, el método más directo y problemático.
Luego miré la respuesta directamente. La idea de la respuesta es usar una matriz para almacenar la cantidad de sumas correspondientes a cada dado, y luego, la próxima vez, use f (n-1) + f (n-2) + f (n-3) + f (n-4) + f (n-5) + f (n-6) para obtener el valor más los dados actuales
Código escrito por mí mismo
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;
}