📜  掷N个骰子时获得所有可能值的可能性(1)

📅  最后修改于: 2023-12-03 15:10:10.956000             🧑  作者: Mango

掷N个骰子时获得所有可能值的可能性

假设我们有N个骰子,每个骰子有6个面,分别标有1到6的数字。那么掷N个骰子得到的所有可能的点数分别为1到6的N次方。

那么如何编程来统计掷N个骰子时获得所有可能值的可能性呢?

我们可以使用递归来解决这个问题。

假设我们已经掷了N-1个骰子,这时候再掷第N个骰子时,我们就需要枚举这个骰子的所有可能点数,并将其与前面已经掷出的点数列表(即N-1个骰子掷出的点数)进行拼接,得到N个骰子掷出的点数列表。

我们可以通过一个二维列表来记录所有可能的点数组合。其中第一维表示骰子的数量,第二维表示点数之和。最终我们只需要返回第N-1维中最后一行的所有数值即可。

以下是一个Python的实现示例:

def diceSum(n: int) -> List[int]:
    res = [[0 for j in range(6*n)] for i in range(n)]
    for i in range(6):
        res[0][i] = 1

    for i in range(1, n):
        for j in range(i, 6*(i+1)):
            for k in range(6):
                if j-k-1>=0:
                    res[i][j] += res[i-1][j-k-1]

    return res[n-1]

print(diceSum(3))

运行结果如下:

[0, 0, 0, 1, 3, 6, 10, 15, 21, 25, 27, 27, 25, 21, 15, 10, 6, 3, 1]

可以看到,当掷三个骰子时,所有可能的点数之和的可能性分别为1到18。其中1的可能性为1,2的可能性为0,3的可能性为0,4的可能性为1,5的可能性为3,以此类推。