关于问题:麦当劳以6、9或20 McNuggets的包装出售鸡肉McNuggets。因此,例如,可以恰好购买15 McNuggets (具有一个6的包装和第二个9的包装),但是不可能恰好购买16 McNuggets,因为6、9和20的非负整数组合不等于16。为了确定是否可以恰好购买n McNuggets,必须找到a、b和c的非负整数(可以是0)值,使得6a+9b+20c=n。
解决方案是
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)之间进行选择?
发布于 2015-04-02 09:45:25
它不会在它们之间进行“选择”。它会评估所有这些参数。您正在对它们使用逻辑or运算符,这意味着如果它们中的任何一个返回True,它的计算结果将为True。
发布于 2015-04-02 10:07:55
这里的一种方法是生成形式为6a + 9b + 20c的整数的set,其中a,b,c的范围从0到n,其中n=目标除以6、9或20。
例如,如果n= 31,则为6*a+9*b+ 20 * c生成整数的set,其中a在范围(31/6)内,b在范围(31/9)内,c在范围(31/20)内。
如果你觉得更容易的话,你可以生成一个列表,而不是一个集合。
然后返回n in possibilities,其中可能性是集合。如果需要返回实际的组合,则需要跟踪数字和因子。
例如,54可以用6 9或9 6来满足。38可以用20或者2 9或3 6来满足。:)
祝你玩得开心,并发布你的解决方案。
为了好玩-你可以用多少种方法买180块鸡块?
https://stackoverflow.com/questions/29403661
复制相似问题