Python方程式

时间:2015-04-02 01:41:45

标签: python python-2.7 recursion

对于这个问题:麦当劳以6,9或20个McNuggets的包装出售Chicken McNuggets。因此,例如,可以准确购买15个McNuggets(一个包6个,第二个包9个),但是不可能只购买16个McNuggets,因为没有6个,9个的非负整数组合为了确定是否可以准确地购买n个McNuggets,必须找到a,b和c的非负整数(可以是0),使得6a + 9b + 20c = n。并且20'加起来为16。

解决方案是

def McNuggets(n):

    if n == 0:
       return True
    if n < 0:
       return False

    return McNuggets(n-6) or McNuggets(n-9) or McNuggets(n-20)

Python如何在McNuggets(n-6),McNuggets(n-9)和McNuggets(n-20)之间做出选择?

2 个答案:

答案 0 :(得分:7)

它不会在&#34;之间做出选择。他们。它评估所有这些。您在其上使用逻辑or运算符,这意味着如果其中任何一个返回True,它将评估为True

答案 1 :(得分:2)

这里的一种方法是生成形式为6a + 9b + 20c的set整数,其中a,b,c的范围为0到n,其中n =您的目标除以6,9或20。

因此,例如,如果n = 31,则为6 * a + 9 * b + 20 * c生成set整数,范围内(31/6),b范围内(31) / 9)和c在范围(31/20)。

如果您觉得更容易,可以生成列表而不是集合。

然后返回n in possibilities,其中可能性是集合。如果您需要返回实际组合,则需要跟踪数量和因素。

例如,54可以通过6 9或9 6来满足。 38可以满足20和2 9 9或3 6 ... ...

玩得开心并发布您的解决方案。

为了好玩 - 有多少种方法可以买到180块金块?