我花了一小会儿的时间来阅读关于麻省理工学院开放课程6的问题集的问题/答案,关于一个程序,用于确定6, 9块和20块中最大的不可数的鸡MCNGGET。不幸的是,我很难将这些答案集成到我自己尝试编写的代码中。
首先,这里是我试图为其编写代码的问题集的实际措辞:
... 我们可以写一个详尽的搜索,找到最大数量的麦金块,无法购买的确切数量。搜索格式可能应遵循以下大纲:
•假设可能存在无法准确购买的麦金块数量,从1开始
·对于每个可能的实例,称为n,测试是否存在非负整数A、B和C,这样
6a+9b+20c=n(这可以通过查看a、b和c的所有可行组合来实现)
•如果没有,就不能以确切的数量购买n,节省n
•当你发现六个连续的n值实际上通过了精确解的检验时,保存的最后一个答案(不是有解的最后一个n值)是正确的答案,因为你通过定理知道,任何较大的数值也可以以精确的数量购买。
编写一个迭代程序,找出最大数量的麦金块,不能购买的确切数量。你的程序应该以以下格式打印答案(其中正确的数字代替了(n)):“无法以准确数量购买的最大数量的麦金块:(n)”提示:你的程序应该遵循上述大纲。
(所引用的定理基本上是说,一旦连续有6个n的允许值,就可以无限期地加上6个,就不会再有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])+'.'

我的困难:
正如你所看到的,我被困在这件事的正中间。我用bools看到了这个问题的其他问题/答案,但我不确定为什么会有人这样做不过,我真的要用bools吗为什么呢?基本上,我会感谢你帮助我找到一个有效的操作来执行“else”。
我不确定我是否真的正确使用了savedn列表。当我运行了这段代码的测试段时,我知道我显然在向列表中添加值,但是确认这是使用“savedn+=[n]”的正确方法会很好。
我仍然只知道很少的命令,而且我的数学能力也很差,所以在回答本课程的最后一个问题时,请假设我是个白痴。另一方面,如果我在上面所尝试的只是毫无希望地偏离了目标,请随意明确地建议我应该如何从头开始。
谢谢你,并为你的长度道歉-这个问题的其他讨论似乎不够透彻,不够有用。(同时也很抱歉,这需要Python2.5。)

最佳答案

你就快到了。假设问题是“找到一个什么样的解决方案才能得到‘N’麦金块”?你有这方面的核心,可以用如下方法解决这个问题:

solution = (0,0,0)
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:
                solution = (a,b,c)

现在,你所需要做的就是像现在这样用簿记来围绕它:
while consecutivecount < 6:
    solution = (0,0,0)
    # ** find a solution like above
    if solution == (0,0,0):
        consecutivecount = 0      #resets consecutivecount value to zero
        savedn += [n]             #adds current value of n to list
    else:
        consecutivecount += 1
    n += 1                        #increases value of n to continue test loop

所以你要寻找一个n的解决方案,如果你找到了一个,你要数一数连续计数,如果你没有找到一个,你要保存另一个无法获得的数字(并重置连续计数)。在这两种情况下,都是时候去另一个n

关于python - 麻省理工学院OCW 6.00的Chicken McNugget计划…再次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21895557/

10-09 17:13