n枚骰子点数和概率问题
随意投掷n枚骰子,求每一种骰子点数和出现的概率。
设n枚骰子点数的和出现数目为
,概率
1. 当n=1时
当n=1时,每一个值出现的概率均等,都是1/6,即:
2. 当n=2时
当n=2时,可以看作时是第二枚骰子将第一枚骰子的所有可能重复一次,但是也将骰子值向后移动第二个骰子的点数,具体操作如下表所示(空位值为0):
- | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
n=1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
2 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
3 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
4 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
5 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
6 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
n=2 | - | 1 | 2 | 3 | 4 | 5 | 6 | 5 | 4 | 3 | 2 | 1 |
观察上表可知:
k=2只有第二枚骰子为1这一种可能,
k=3有2+1和1+2这两种可能
k=4有3+1,2+2,1+3这三种可能
...
观察两个骰子和12的那一列,和为12的可能有1+11,2+10,3+9,4+8,5+7,6+6,这6种可能,但是在一枚骰子时,k=11,10,9,8,7都是不可能的所以设置为0
所以有
其中不存在的设置为0
由此可知
3. 当筛子数为n时
设n枚骰子的和为k对应的数目为则有:
再根据计算概率
4. java实现
根据1、2、3可知算法仅需要一维数组就可以存储结果,但此时前面的结果会影响后面的结果,所以先计算大值的出现次数,然后再小值的次数
class Solution{
public double[] getNP(int n){
double total = Math.pow(6, n); // 总次数
int[] valTotal = new int[6 * n + 1];
double[] res = new double[5 * n + 1];
for (int i = 1; i <= 6; i++) {
valTotal[i] = 1; // 赋初值
}
for (int i = 2; i <= n; i++) {
for (int j = 6 * i; j >= i; j--) {
valTotal[j] = 0;
for (int k = j - 1; k >= j - 6; k--) {
if (k >= 0)
valTotal[j] += valTotal[k];
}
}
for (int j = i - 1; j >= 0; j--) {
valTotal[j] = 0; // 清除无效数据,否则会影响后续的计算
}
}
for (int i = 0; i < 5 * n + 1; i++) {
res[i] = valTotal[i + n] / total;
}
return res;
}
}
网友评论