0
点赞
收藏
分享

微信扫一扫

第39级台阶,黄金连分数

朱小落 2022-03-11 阅读 80

文章目录

第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有四舍五入的功能

通过截图

在这里插入图片描述
如有错误,敬请指正,欢迎交流,谢谢♪(・ω・)ノ

举报

相关推荐

0 条评论