python--剑指offer--中等--60. n个骰子的点数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from typing import List


class Solution:
    def dicesProbability(self, n: int) -> List[float]:
        end = 6 * n + 1
        dp = [[0] * 67 for i in range(12)]  # 表示i个骰子掷出s点的次数
        for i in range(1, 7):
            dp[1][i] = 1  # 表示一个骰子掷出i点的次数为1

        for i in range(2, n + 1):  # 表示骰子的个数
            for s in range(i, end):  # 表示可能会出现的总点数
                for k in range(1, 7):  # 表示当前这个骰子可能掷出的点数
                    diff = s - k  # diff表示总点数减去当前骰子的点数后剩余的(n-1)枚骰子的点数之和
                    if diff < i - 1:  # (i - 1)表示(i - 1)枚骰子的最小总点数,"diff < i - 1"这种情况是不存在的
                        break
                    dp[i][s] += dp[i - 1][diff]  # 当前n个骰子出现的点数之和等于前一次出现的点数之和加上这一次出现的点数

        from math import pow

        total = pow(6, n)  # 掷出n次点数出现的所有情况
        for i in range(n, end):
            dp[n][i] = round(dp[n][i] / total, 5)  # 第i小的点数出现的概率
        return dp[n][n:end]


if __name__ == '__main__':
    solution = Solution_()
    # n = 1
    n = 2
    res = solution.dicesProbability(n)
    print(res)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from typing import List


class Solution:
    def dicesProbability(self, n: int) -> List[float]:
        end = 6 * n + 1
        dp = [0] * 67   # 表示i个骰子掷出s点的次数
        for i in range(1, 7):
            dp[i] = 1  # 表示一个骰子掷出i点的次数为1

        for i in range(2, n + 1):
            for s in range(6 * n, i - 1, -1):  # 从后往前更新
                for k in range(1, 7):
                    diff = s - k
                    if diff < i - 1:
                        break
                    dp[s] += dp[diff]

        from math import pow

        total = pow(6, n)  # 掷出n次点数出现的所有情况
        for i in range(n, end):
            dp[i] = round(dp[i] / total, 5)  # 第i小的点数出现的概率
        return dp[n:end]


if __name__ == '__main__':
    solution = Solution()
    # n = 1
    n = 2
    res = solution.dicesProbability(n)
    print(res)

[参考]
解析来源于该文章
代码注释来源于该文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值