static void printProbability(int amount) {
if (amount == 0) {
return;
}
int[][] sum = new int[2][amount * 6];
for (int i = 0; i < 6; i++) { // 初始化第一个子数组(用完了一个骰子)
sum[0][i] = 1;
}
for (int count = 0; count < amount - 1; count++) { // 用剩余的筛子进行累加
int flag = (count+1) % 2; // 此次被加数数组
for (int i = 1; i <= 6; i++) { // 加数
for (int j = 0; j < sum[1- flag].length; j++) { // 加数索引
if (sum[1- flag][j] != 0) { // 加数不为空
int index = j + i; // 被加数索引
sum[flag][index] += sum[1- flag][j]; // 被加数值
}
}
}
for (int k = count; k < (count + 1) * 6; k++) { // 清空加数的记录,防止下次成为被加数数组时计算错误
sum[1- flag][k] = 0;
}
}
int resultArrayIndex = (amount + 1) % 2; // 最终结果在那个数组索引
for (int i = 0; i < sum[resultArrayIndex].length; i++) {
System.out.printf("%d : %.3f\n", i+1 , (double)(sum[resultArrayIndex][i] / Math.pow(6,amount)));
}
}
基于循环求:n个骰子所有点数之和的概率
最新推荐文章于 2021-02-13 09:20:26 发布