文章目录
第39级台阶
题目描述
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶,先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。要求提交的是一个整数。
分析
- leetcode走台阶的升级版,如图应该很好看出状态转移方程,其实还是动态规划,只不过现在变成了二维的而已。
运行代码
dp = [[0,0],[1,0],[1,1]]
for i in range(3,40):
dp.append([0,0])
dp[i][0] = dp[i-1][1]+dp[i-2][1] # 左边由右边决定
dp[i][1] = dp[i-1][0]+dp[i-2][0] # 右边由左边决定
print(dp[-1][1])
通过截图
文章目录
黄金连分数
黄金分割数 0.61803...是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。
对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物,其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!!
言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。
比较简单的一种是用连分数:
1
黄金数 = ---------------------
1
1 + -----------------
1
1 + -------------
1
1 + ---------
1 + ...
这个连分数计算的“层数”越多,它的值越接近黄金分割数。
请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后 100位。
小数点后3位的值为:0.618;
小数点后4位的值为:0.6180;
小数点后5位的值为:0.61803;
小数点后7位的值为:0.6180340。(注意尾部的 0,不能忽略)
你的任务是:写出精确到小数点后100位精度的黄金分割值。
注意:尾数的四舍五入! 尾数是0也要保留!
运行限制
最大运行时间:1s
最大运行内存: 128M
分析
- 模拟手算
- 熟悉使用decimal模块
运行代码
import decimal # 导入十进制模块(用来做高精度计算)
decimal.getcontext().prec = 101 # 设置有界环境(方便后续四舍五入,因为无法确定最后是否是0)
count = decimal.Decimal(1) # 让count可以进入控制范围
fot i in range(20000):
count = decimal.Decimal(1/(1+count))
print(round(count,100)) # round有四舍五入的功能
通过截图
如有错误,敬请指正,欢迎交流,谢谢♪(・ω・)ノ