我写了一组代码来计算丢番图方程:
bestSoFar = 0
packages = (6,9,20)
numMc = 0
guess= 0
possibn = []
for n in xrange(1, 150):
for a in xrange(0, (n/ packages[0]) +1):
for b in xrange(0,(n/ packages[1]) +1):
c = (n - packages[0]* a - b * packages[1]) / packages[-1]
numMc = packages[0] *a + packages[1] * b + packages[-1] * c
if numMc == n and n not in possibn:
possibn.append(n)
print possibn
if len(possibn) >6 and possibn [-1] - possibn[-6] == 5:
bestSoFar = n
break
原始问题集是由麻省理工学院课程设计的。基本上是通过安排不同大小的包装的比例来计算可以购买的McNuggets的数量(麦当劳在一个包装中做6,9,20个McNuggets)。比如,通过购买两个6-McNuggets和一个9-McNuggets可以买到21个McNuggets。如果可以用精确数量的包装购买McNuggets的数量,我将它们存储在一个列表中。结果发现,如果也可以准确地购买6个连续数字,那么剩下的数字也是可能的。
从我的代码中得到bestSoFar = 149的结果,而期望的答案是40.原因是它一直循环直到n达到149.我想在40处停止(使用break语句)。然而,它失败了,我正在为你们寻求建议。此外,如果无论如何更快/更容易地编程问题,我也很高兴知道并学习它。
非常感谢你。 凯西
答案 0 :(得分:1)
如果您不应该使用某个函数,只需指定一个变量来导致其他循环中断。
bestSoFar = 0
packages = (6,9,20)
numMc = 0
guess= 0
possibn = []
finished = False
for n in xrange(1, 150):
for a in xrange(0, (n/ packages[0]) +1):
for b in xrange(0,(n/ packages[1]) +1):
c = (n - packages[0]* a - b * packages[1]) / packages[-1]
numMc = packages[0] *a + packages[1] * b + packages[-1] * c
if numMc == n and n not in possibn:
possibn.append(n)
# print possibn
if len(possibn) >6 and possibn [-1] - possibn[-6] == 5:
bestSoFar = n
finished = True
break
if finished: break
print bestSoFar
答案 1 :(得分:0)
将其转换为函数return
:
from __future__ import print_function
def solve(*packages):
bestSoFar = 0
numMc = 0
guess= 0
possibn = []
for n in xrange(1, 150):
for a in xrange(0, (n / packages[0]) + 1):
for b in xrange(0, (n / packages[1]) + 1):
c = (n - packages[0] * a - b * packages[1]) / packages[-1]
numMc = packages[0] * a + packages[1] * b + packages[-1] * c
if numMc == n and n not in possibn:
possibn.append(n)
print possibn
if len(possibn) > 6 and possibn [-1] - possibn[-6] == 5:
return n
return bestSoFar
x = solve(6, 9, 20)
print(x)
答案 2 :(得分:-1)
我实际上并不清楚你的期望。但是,我所看到的是你想要打破一切。你给出的休息只退出内循环。将另一个break
语句放在内循环之外和第一循环内。