对于这个问题:麦当劳销售的麦鸡块是6块、9块或20块。因此,举例来说,它是有可能买整整15个麦金块(其中一个包是6个,第二个包是9个),但不可能正好买16个麦金块,因为没有非负整数组合的6,9和20加起来等于16。为了确定是否可以购买n个麦克金块,必须找到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)之间进行选择?在
这里的一种方法是生成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
,其中probabilities是集合。如果需要返回实际的组合,则需要跟踪数字和因子。在例如,54可以由69或96来满足。38可以由20和29或36来满足。。。:)
玩得开心点,贴出你的解决方案。在
为了好玩-有多少种方法可以买180块金块?在
它不会在它们之间“选择”。它会评估所有这些。您正在对它们使用逻辑
or
运算符,这意味着如果其中任何一个返回True
,则其计算结果为True
。在相关问题 更多 >
编程相关推荐