美文网首页剑指offer- python实现
面试题60:n个骰子的点数

面试题60:n个骰子的点数

作者: 不会编程的程序猿甲 | 来源:发表于2020-04-19 12:54 被阅读0次

    题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。

    思路:
    这道题需要用到动态规划,首先需要确定初始边界条件,当n等于1时,1-6出现的次数均为1;接着确定状态转换过程,当增加一个骰子时,第n个骰子的可能结果为1-6,所以出现次数为n的结果的次数为上一维度n-1,n-2,n-3,n-4,n-5,n-6的次数之和,且新增一个骰子可能出现的次数为n~6n;

    代码思路:

    class Solution:
        def twoSum(self, n: int) -> List[float]:
            #一维数组
            res = [0]*(6*n+1)
            for i in range(1,7):
                res[i] = 1   #初始条件
            for i in range(2,n+1):   #骰子个数递增
                for j in range(6*i,i-1,-1):  #倒着赋值 否则会覆盖
                    temp = 0
                    for k in range(1,7):
                        if j-k<i-1:  #特殊情况
                            break
                        temp +=res[j-k]   #6次计算
                    res[j] = temp
            total = 6**n
            return [x/total for x in res[n:]]
    
    

    提交结果:

    image.png

    相关文章

      网友评论

        本文标题:面试题60:n个骰子的点数

        本文链接:https://www.haomeiwen.com/subject/nysdvhtx.html