LintCoder python 小白2-骰子求和
来源:互联网 发布:淘宝店更换类目影响 编辑:程序博客网 时间:2024/06/03 23:40
题目:扔 n 个骰子,向上面的数字之和为 S。给定 Given n,请列出所有可能的 S 值及其相应的概率。
一开始的想法是:
投n个骰子,其实就是n次1-6的循环,将其每次和放在一个列表中,后面根据数字之和S范围(n,6n),用list.count(s[i])求出来每个情况下的次数之和,但是这样的话会导致内存超出限制,1-15个骰子还能够实现,后面基本不能。
一开始代码如下:
def sum1(x): count1=[] for i in x: for j in range(1,6+1): z=i+j count1.append(z) return count1def dicesSum(self, n): # Write your code here if n==0 : return None if n==1: yy=[[1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]; return yy mylist=[1,2,3,4,5,6] for k in range(1,n): mylist=sum1(mylist); x=[] z1 = float(6**n) for z in range(n,6*n+1): result=mylist.count(z) x=x+[[z,result/z1]] return mylist
后面,找到网上一篇python这道题的代码,它通过动态规划,第一次开始累加到第n次骰子,其中发现到规律,n个骰子有5*n+1种s结果(6n-n+1),他们是对称情况,如果结果是偶数,则中间(5*n+1)/2和(5*n+1)/2+1是相同。
代码如下:
def dicesSum(self, n): # Write your code here if n == 0 : return None result = [ [1,1,1,1,1,1], ] #一开始第一个骰子出现的情况 # if n == 1: return result[0] # 计算n个骰子出现的各个次数和 for i in range(1,n): x = 5*(i+1)+1 #骰子从第二个开始出现取值可能的次数的情况有5n+1,这里n=i+1 result.append([0 for _ in range(x)]) #重新一列后面补为0 for j in range(x): if j < 6: #前六 result[i][j] = (sum(result[i-1][0:j+1])) elif j >=6 and j <= 3*i+2: #六 result[i][j] = (sum(result[i-1][j-5:j+1]))#前面的n-1, else: break left = 0 right = len(result[i]) - 1 while left <= right: result[i][right] = result[i][left] left += 1 right -= 1 #他们呈现对称 res = result[-1] #列表的倒数第一列 all = float(sum(res)) other = [] # 第i个元素代表骰子总和为n+i for i,item in enumerate(res): #额numerate遍历序列中的元素以及它们的下标 # pro = self.round(item/all) # 自己写的四舍五入算法和LintCode有出入,其实网站自身会处理数据,这里不再做处理 pro = item/all other.append([n+i,pro]) return other
总结:
要考虑到内存和时间的限制
学会逆向思考,找到规律。
阅读全文
0 0
- LintCoder python 小白2-骰子求和
- 骰子求和问题
- 3个骰子求和
- LintCode 20 骰子求和
- Java实现-骰子求和
- lintcode 骰子求和
- 小明的骰子
- 小明的骰子
- (lintcode)第20题 骰子求和
- lintcode 20. 骰子求和 动态规划
- python模拟掷骰子
- 小明的骰子 SDUT
- 每天小练笔2-大数求和
- 20骰子(2)
- 骰子
- 一个小试验,骰子游戏,没有UI
- C++进阶小程序(投骰子)
- 【小程序】摇骰子游戏BETA版
- memmove 函数
- 特征选择与评分的可视化显示
- Centos 7 中部署ASP.NET Core网站问题记录
- Linuxc语言复习篇指针(-)
- Maven的Tomcat插件的使用
- LintCoder python 小白2-骰子求和
- PagerSlidingTabStrip源码分析
- 带Attention机制的Seq2Seq框架梳理
- 石子归并问题
- 直方图最大矩形面积--c/c++
- Android之自定义Button控件
- Java中声明变量的八进制与十六进制
- 第四天-Java继承
- CentOS 7装mysql