【发布时间】:2013-04-21 19:21:20
【问题描述】:
办公用品商店以 5、8 或 24 支的包装出售您最喜欢的钢笔类型。因此,例如,可以正好买 13 支钢笔(一包 5 支,第二包 8 支),但不可能正好买 11 支钢笔,因为没有 5 和 8 的非负整数组合和 24 加起来是 11。要确定是否有可能恰好购买 n 支笔,必须找到 a、b 和 c 的非负整数值,使得
5a + 8b + 24c = n
编写一个名为 numPens 的函数,该函数接受一个参数 n,如果可以购买 5、8 和 24 包单位的组合以使笔的总数正好等于 n,则返回 True,否则返回 False .
注意:这是上个月期中考试中提出的问题。我无法解决它,但仍在寻找解决方案。任何帮助都将被接受。 python中的代码或解决它的算法。谢谢
【问题讨论】:
-
这是背包问题的一个直接变体。
-
这是模数/除法运算,只需要检查 N 是否大于 24,N % 24 = 余数;如果余数 > 8,N % 8 = 余数;如果余数 > 5,N % 5 = 余数;返回余数 == 0
-
@David:如果我正确理解你的算法,那就错了。考虑 N = 25。您的算法将得出结论,没有解决方案(因为它抓取 24 包,但随后找不到 1 包),而实际上 5+5+5+5+5=25 是一个解决方案.
-
@JeremyRoman 是的,刚刚在 Idle 中测试并发现了这一点,>= 进行比较会起作用。其他边缘也很少(如果 N
标签: python