本文主要是介绍LintCode 20. 骰子求和 Python3算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述
扔 n 个骰子,向上面的数字之和为 S。给定 n,请列出所有可能的 S 值及其相应的概率。
说明
你不需要关心结果的准确性,我们会帮你输出结果。
样例
- 样例 1:输入:n = 1
输出:[[1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]
解释:掷一次骰子,向上的数字和可能为1,2,3,4,5,6,出现的概率均为 0.17。- 样例 2:输入:n = 2
输出:[[2,0.03],[3,0.06],[4,0.08],[5,0.11],[6,0.14],[7,0.17],[8,0.14],[9,0.11],[10,0.08],[11,0.06],[12,0.03]]
解释:掷两次骰子,向上的数字和可能在[2,12],出现的概率是不同的。
挑战
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)
解析
运行时间最慢的就是我了
class Solution:def dicesSum(self, n):if n == 0 : return Noneresult = [[1,1,1,1,1,1],]for i in range(1,n):x = 5*(i+1)+1result.append([0 for _ in range(x)])for j in range(x):if j < 6:result[i][j] = (sum(result[i-1][0:j+1]))elif 6 <= j <= 3*i+2:result[i][j] = (sum(result[i-1][j-5:j+1]))else:breakleft = 0right = len(result[i]) - 1while left <= right:result[i][right] = result[i][left]left += 1right -= 1res = result[-1]all = float(sum(res))other = []for i,item in enumerate(res):pro = item/allother.append([n+i,pro])return otherdef round(self,num):num = num*100num = int(2*num)/2+int(2*num)%2num = num/100.0return num
运行结果
这篇关于LintCode 20. 骰子求和 Python3算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!