劍指Offer(Python多種思路實現):把n個骰子扔在地上,所有骰子朝上一面的點數之和爲s。輸入n,打印出s的所有可能的值出現的概率。

劍指Offer(Python多種思路實現):把n個骰子扔在地上,所有骰子朝上一面的點數之和爲s。輸入n,打印出s的所有可能的值出現的概率。

面試60題

題目:把n個骰子扔在地上,所有骰子朝上一面的點數之和爲s。輸入n,打印出s的所有可能的值出現的概率。

解決思路:

def dice_probability(n, val=6):
    dp = [[0]*val*n for _ in range(n)]
    dp[0][:val] = [1] * val  # 初始化第一個骰子
    
    for i in range(n-1):  # 根據第i個骰子更新第i+1個骰子
        for j in range(i, len(dp[i+1])):
            # 第i+1個骰子和爲j(實際爲j+1,因爲數組下標從0開始)的次數,等於第i個
            # 骰子j-1 ~ j-6次數的總和
            dp[i+1][j] = sum([dp[i][j-k] for k in range(1, val+1)])
            
    # 整理數據成爲dict,key表示和,value表示出現的次數
    # count = {i+1: times for i, times in enumerate(dp[-1])}
    # 計算概率
    count = {i+1: round(float(times / (val**n)), 5)
             for i, times in enumerate(dp[-1]) if times!=0}
    return count

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章