Я провел немного времени, читая предыдущие вопросы/ответы о задаче MIT OpenCourseWare 6.00 о программе для определения максимального недостижимый количество куриных McNuggets в пакетах из 6, 9 и 20. К сожалению, мне трудно интегрировать эти ответы в код, который я пытался сделать самостоятельно.MIT OCW 6.00's Chicken McNugget program ... снова
Во-первых, здесь фактическая формулировка проблемы установить, что я пытаюсь написать код:
... мы можем написать исчерпывающий поиск, чтобы найти наибольшее количество McNuggets, которые не могут быть куплены в точное количество. Формат поиска должен, вероятно, следовать этому контуру:
• Гипотезировать возможные экземпляры чисел McNuggets, которые нельзя точно купить, начиная с 1
• Для каждого возможного экземпляра, называемого n, проверьте, существуют ли неотрицательные целые числа a , b и c, так что 6a + 9b + 20c = n. (Это можно сделать, просмотрев все возможные комбинации a, b и c)
• Если нет, n нельзя купить в точном количестве, сохраните n
• Когда вы нашли шесть последовательных значений n, которые на самом деле пройти тест на точное решение, последний ответ, который был сохранен (не последнее значение n, у которого было решение), является правильным ответом, так как по теореме вы знаете, что любая сумма больше также может быть куплена в точном количестве. Напишите итеративную программу, которая найдет наибольшее количество McNuggets, которые нельзя купить в точном количестве. Ваша программа должна распечатать ответ в следующем формате (где вместо (n) указано правильное число): «Наибольшее количество McNuggets, которые нельзя купить в точном количестве: (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 + = [n]», было бы неплохо.
Я все еще знаю очень мало команд, и я очень ржавый математические навыки, так как и мой последний вопрос из этого курса, пожалуйста, предположим, что я идиот в ответ. С другой стороны, если то, что я пытаюсь сделать выше, просто безнадежно не важно, не стесняйтесь ясно предлагать, как я должен начинать с нуля.
Спасибо и извиниться за длину - другие обсуждения этого вопроса просто не казались достаточно полными, чтобы быть полезными. (И также извиняется за то, что для этого требуется Python 2.5.)
В чем проблема с «использованием bools»? Установка «переменной флага» в True или False для отслеживания того, является ли какое-либо условие истинным или ложным, является вполне разумной вещью. Конечно, почти всегда есть способы перестроить ваш код, чтобы это не было необходимо, но часто эта реструктуризация может быть довольно резкой. – abarnert
Я не понимаю текст проблемы ... но это звучит довольно круто, и вы знаете, что a может идти только вверх не более чем на 'n // 6' ... аналогично b до' n // 9' и c только для ' n // 20' ..., который должен много помочь с проблемами скорости –
в ответ на 2. да до тех пор, пока эта строка выполняется, она должна быть добавлена к 'savedn' –