《程序员的算法趣题》-(日)增井敏克 Python解题 -- (Q29)

《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby(为主),JavaScript,C语言。有兴趣的同学,可以购书阅读~

在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6)

Q29 合成电阻的黄金分割比

    我们在物理课上都学过“电阻”,通过把电阻串联或者并联可以使电阻值变大或者变小。电阻值分别为 R1、 R2、 R3
的 3 个电阻串联后,合成电阻的值为 R1+ R2+ R3。同样 3个电阻并联时,合成电阻的值则为“倒数之和的倒数”
    现在假设有 n 个电阻值为1 Ω 的电阻。组合这些电阻,使总 电 阻 值 接 近 黄 金 分 割 比1.6180339887…。举个例子,当 n = 5 时,如果像图这样组合,则可以使电阻值为 1.6。

                                                     

问题
     求 n = 10 时,在组合电阻后得到的电阻值中,最接近黄金分割的数值,请精确到小数点后 10 位。

感觉书中写的算法好复杂呀,还是我写的这个比较简单(是我问题想简单了?不过答案都是一样的,我就当作者把问题想复杂了吧~ 嘿嘿)。

def series_connection(*args):
    return sum(args)

def parallel_connection(*args):
    denominator = 0
    for i in args:
        denominator += 1/i
    return 1/denominator

calculated_map = {}
total_number = 10

possible_values = [1]
for i in range(1, total_number):
    new_values = []
    for pre_value in possible_values:
        new_values.append(series_connection(pre_value, 1))
        new_values.append(parallel_connection(pre_value, 1))
    possible_values = new_values

golden_value = 1.6180339887
min_deviation = golden_value
for value in possible_values:
    if abs(golden_value - value) < min_deviation:
        min_deviation = abs(golden_value - value)

print("最接近黄金分割的数值为:{0:.11}".format(golden_value+min_deviation))

 运行结果:

           最接近黄金分割的数值为:1.6181818182

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值