首页 > 编程知识 正文

程序员的算法趣题日增井敏克 Python解题 Q29,程序员的算法趣题

时间:2023-05-05 01:11:44 阅读:226313 作者:3810

《程序员的算法趣题》-(日)明理的烧鹅 , 书中为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/denominatorcalculated_map = {}total_number = 10possible_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_valuesgolden_value = 1.6180339887min_deviation = golden_valuefor 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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。