题目描述:
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值的出现概率。
思路:定义两个数组。数组的长度为6*n,即可能出现的最大和。数组每个元素的值代表出现的次数,比如probability[5]表示点数和为5出现的次数。在一轮循环中,一个数组记录之前一次所有出现的情况,一个数组记录这一次的所有出现的情况。例如这一次出现和为n的次数,应该等于另一个数组里记录的n-1,n-2, n-3, n-4, n-5, n-6的和。
class Solution:
# @param {int} n an integer
# @return {tuple[]} a list of tuple(sum, probability)
def dicesSum(self, n):
# Write your code here
if n<1:
return []
probability = []
probability.append([0]*(6*n+1))
probability.append([0]*(6*n+1))
flag = 0
ratio = []
for i in range(1,7):
probability[flag][i]=1
for k in range(2, n+1):
for i in range(0, k):
probability[1-flag][i]=0
for i in range(k, 6*k+1):
probability[1-flag][i] = 0
for j in range(1, min(i+1,7)):
probability[1-flag][i] += probability[flag][i-j]
flag = 1-flag
total = pow(6,n)
for i in range(n, 6*n+1):
ratio.append([i, probability[flag][i]/total])
return ratio
本文介绍了一种计算n个骰子投掷结果点数和的概率分布的方法。通过使用两个数组来记录每轮投掷的累积概率,实现了对所有可能结果的有效跟踪。这种方法能够高效地解决此类概率问题。

618

被折叠的 条评论
为什么被折叠?



