|
这个题网友后来弄了一个python的程序,我那时因为没安装ubuntu虚拟机,也没有python,就没试,现在又想起这个题,用虚拟机里的python运行了一下,感觉像是比之前快一点,但是我不记得当时所说的“大点的数”都是什么了,也验证不了。
- # n 个电阻能生成的所有阻值
- def possible_reses(n, reses):
- new_reses = set()
- for i in range(1, n // 2 + 1):
- for r1 in reses[i]:
- for r2 in reses[n - i]:
- # 串联
- new_reses.add(r1 + r2)
- # 并联
- new_reses.add(1 / (1 / r1 + 1 / r2))
- return new_reses
- # 目标阻值
- target = 137 / 41
- # 最大电阻数量,如果生成目标阻值所需的电阻数超过此值,则不再求解
- max_res = 100
- # i 个电阻能生成的阻值集合
- reses = {i: set() for i in range(1, max_res + 1)}
- reses[1] = {1}
- for n in range(2, max_res + 1):
- reses[n] = possible_reses(n, reses)
- if target in reses[n]:
- print(f"最少需要 {n} 个 1 欧姆电阻")
- break
- else:
- print(f"在 {max_res} 个电阻内无解")
复制代码
|
|