【发布时间】:2014-02-20 00:21:25
【问题描述】:
我花了一点时间阅读之前关于 MIT OpenCourseWare 6.00 的问题集的问题/答案,该问题集有关用于确定 6、9 和 20 包中的最大 无法达到 数量的麦乐鸡块的程序. 不幸的是,我无法将这些答案集成到我尝试自己编写的代码中。
首先,这是我尝试为其编写代码的问题集的实际措辞:
...我们可以编写一个详尽的搜索来找到最大数量的无法准确购买的 McNuggets。搜索的格式大概应该遵循这个大纲:
• 假设从 1 开始无法准确购买的 McNuggets 数量的可能实例
• 对于每个可能的实例,称为 n,测试是否存在非负整数 a、b 和 c,使得 6a+9b+20c = n。 (这可以通过查看 a、b 和 c 的所有可行组合来完成)
• 如果不是,n 不能精确数量购买,保存 n
• 当你找到六个连续的 n 值实际上通过了精确解的测试时,最后保存的答案(不是最后一个有解的 n 值)就是正确答案,因为你知道任何更大数量的定理也可以以精确的数量购买。 编写一个迭代程序,找出不能以确切数量购买的最大数量的 McNuggets。您的程序应按以下格式打印答案(其中提供了正确的数字代替 (n)):“不能以确切数量购买的最大数量的 McNuggets:(n)”
提示:您的程序应该按照上面的大纲。
(引用的定理基本上是说,一旦你连续有六个允许的 n 值,你可以无限期地添加六个,并且不会再有 n 的不允许值。)
这是我的代码:
n = 1 #set first value for trying to solve the equation
savedn = [] #list for holding values of n w/ no integer solution
consecutivecount = 0
while consecutivecount < 6:
for a in range(0,n):
for b in range(0,n):
for c in range(0,n):
if 6*a + 9*b + 20*c == n:
consecutivecount += 1
else:
#NOW A MIRACLE HAPPENS!!!
consecutivecount = 0 #resets consecutivecount value to zero
savedn += [n] #adds current value of n to list
n += 1 #increases value of n to continue test loop
print 'Largest amount of McNuggets that cannot be bought in exact quantity:',str(savedn[-1])+'.'
我的困难:
如您所见,我被困在中间,指示的地方。我使用布尔值看到了这个问题的其他问题/答案,但我不确定为什么有人会这样做。不过,我真的 必须 使用 bool 吗?为什么?基本上我会很感激帮助找出为“其他”执行的有效操作。
-
我不确定我是否真的正确使用了已保存列表。当我运行这段代码的测试段时,我知道我显然在向列表中添加值,但是确认这是使用“savedn += [n]”的正确方法会很好。
李>
我仍然知道很少的命令,并且我的数学技能非常生疏,所以对于我在本课程中的最后一个问题,请假设我是一个回答问题的白痴。另一方面,如果我在上面的尝试完全偏离了标准,请随时明确建议我应该如何从头开始。
感谢并道歉,这个问题的其他讨论似乎不够彻底,没有用。 (也很抱歉这需要 Python 2.5。)
【问题讨论】:
-
“使用布尔值”到底有什么问题?将“标志变量”设置为 True 或 False 以跟踪某些条件是真还是假是完全合理的做法。当然,几乎总有一些方法可以重组你的代码,这样就没有必要了,但这种重组通常会非常激烈。
-
我不明白问题的文字......但这听起来有点酷,提示你知道a最多只能达到
n//6......同样b到n//9和c只能到n//20... 这应该有助于解决速度问题 -
回答 2. 是的,只要该行执行它就应该附加到
savedn -
@abarnert 我对使用 bool 没有实际问题;我的麻烦是在我的研究中我还没有遇到过如何正确使用它们的解释,所以我一直在尝试使用我所知道的。如果编写此算法的最快/最优雅的方法涉及布尔值,我会全力以赴,但我想我首先会通过展示我创建的基本条件/迭代并找出如何使它们按原样工作来减少人们的负担.除非我已经开始了,否则实际上没有办法做到这一点。
-
@devonjones:“使用布尔值”是微不足道的。如果您知道如何使用 int(可以是任何数字的值),那么您就会知道如何使用 bool(可以是 True 或 False 的值,仅此而已)。在这里学习真的没有什么复杂的。事实上,您已经在您编写的每个
if语句中正在使用布尔值:6*a + 9*b + 20*c == n要么是 True,在这种情况下会发生“if”部分,要么是 False,在这种情况下会发生“else” " 部分发生了。
标签: python algorithm python-2.5