【发布时间】:2020-02-08 23:05:01
【问题描述】:
Project Euler problem 31 有问题。 正确答案是 73,682,我的答案是 73,681。 问题来了:
在英国,货币由英镑 (£) 和便士 (p) 组成。一般流通的硬币有八种: 1p、2p、5p、10p、20p、50p、1 英镑 (100p) 和 2 英镑 (200p)。
可以通过以下方式赚取 2 英镑: 1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p。
使用任意数量的硬币可以通过多少种不同的方式制作 2 英镑?
还有我的代码:
counter = 0
for a in range(3):
for b in range(5):
if 100 * a + 50 * b > 200:
break
for c in range(11):
if 100 * a + 50 * b + 20 * c > 200:
break
for d in range(21):
if 100 * a + 50 * b + 20 * c + 10 * d > 200:
break
for e in range(41):
if 100 * a + 50 * b + 20 * c + 10 * d + 5 * e > 200:
break
for f in range(101):
if 100 * a + 50 * b + 20 * c + 10 * d + 5 * e + 2 * f <= 200:
counter += 1
print(counter)
【问题讨论】:
-
您的解决方案差 1;看起来您只是错过了可以使用 2 英镑硬币而不是其他任何东西的情况。
-
为了匹配你可以使用
itertools模块的不同方式,请看这里:docs.python.org/3/library/itertools.html -
@kaya3 是对的,代码中的任何地方都没有“200 * X”。但是不要为此添加循环,只需从
counter开始,就可以了。顺便说一句,欢迎来到 Stack Overflow!查看tour 和How to Ask。
标签: python