首页 > 解决方案 > 蛮力解决方案返回 Project Euler 问题 31 的错误答案

问题描述

我遇到了Project Euler 问题 31的问题。正确答案是 73,682,我的答案是 73,681。这是问题所在:

在英国,货币由英镑 (£) 和便士 (p) 组成。一般流通的硬币有八种:1便士、2便士、5便士、10便士、20便士、50便士、1英镑(100便士)和2英镑(200便士)。

可以通过以下方式赚取 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)

标签: python

解决方案


问题是您的代码没有考虑您只有 2 英镑硬币的情况。您只需将变量初始化counter为 1 即可解决此问题。


推荐阅读