McDonald’s vende Chicken McNuggets solo en paquetes de 6, 9 o 20. ¿Cuál es la mayor cantidad de McNuggets que no se pueden comprar exactamente?
Aquí tienes un teorema:
Si es posible comprar x, x+1,…, x+5 conjuntos de McNuggets, para algún x, entonces es posible comprar cualquier cantidad de McNuggets >= x, dado que los McNuggets vienen en paquetes de 6, 9 y 20.
Usando el teorema anterior, escribe una búsqueda exhaustiva para encontrar el número más grande de McNuggets que no se puede comprar en cantidad exacta, es decir, escribe un programa iterativo que encuentre el número más grande de McNuggets que no se puede comprar en cantidad exacta. El formato de la búsqueda debe seguir el siguiente esquema:
Hipotetiza posibles instancias de números de McNuggets que no se pueden comprar exactamente, comenzando con 1.
Para cada instancia posible, llamada n, prueba si existen enteros no negativos a, b y c, tales que 6a+9b+20c = n.
Si no se pueden comprar n McNuggets en cantidad exacta, guarda n.
Cuando se hayan encontrado 6 valores consecutivos de n donde 6a+9b+20c = n, la última respuesta que se guardó (no el último valor de n que tuvo una solución) es la respuesta correcta, ya que, según el teorema, cualquier cantidad mayor que este valor guardado de n también se puede comprar en cantidad exacta.
El error está en la línea 14 del siguiente código y este es el error:
elif(6a + 9b + 20c < n_saved or 6a + 9b + 20c > n_saved):
Aquí está el código:
def largest_not(a, b, c, n, n_saved):
a = 0
b = 0
c = 0
n = 0
n_saved = 0
for a in range (10):
for b in range (10):
for c in range (10):
for n in range (10):
for n_saved in range (10):
if (6a + 9b + 20c == n):
print (n)
elif(6a + 9b + 20c < n_saved or 6a + 9b + 20*c > n_saved):
print (n_saved)
if (n – n_saved > 5):
print “El número más grande de McNuggets que no se puede comprar en cantidad exacta es: ” + “<” + n_saved + “>”
else:
print “No se ha encontrado el número más grande de McNuggets que no se puede comprar en cantidad exacta.”
a=6
b=9
c=20
largest_not(a, b, c, n, n_saved)
davy.ai
La solución dada anteriormente tiene varios errores. Aquí hay una versión corregida del código:
Los principales problemas con el código anterior fueron:
largest_not
, por lo que se han eliminado.<
y>
se codificaron como entidades HTML. Se han reemplazado por los símbolos correctos (<
y>
).a
,b
,c
,n
yn_saved
eran innecesarios y se han eliminado. En su lugar, usamos un solo bucle sobren
y actualizamos los valores dea
,b
yc
en consecuencia.n_saved
donde hubo 6 valores consecutivos den
con soluciones, el código lo estaba imprimiendo tan pronto como se encontraba una no solución. El código corregido utiliza un contador para realizar un seguimiento de las no soluciones consecutivas, y devuelve el último valor den_saved
cuando el contador alcanza 6.a
,b
yc
antes de llamar a la función, y asignamos el resultado de la función a una variableresult
.El código corregido ejecuta un bucle sobre todos los posibles valores de
n
, y verifica si existen enteros no negativosa
,b
yc
tales que6a+9b+20c = n
. Si existen dichos enteros, el contadorcount
se restablece a 0. De lo contrario,count
se incrementa en 1. Sicount
alcanza 6, hemos encontrado 6 valores consecutivos den
donde no hay solución, y se devuelve el último valor guardado den
(es decir, el antes de que comenzaran las no soluciones) como respuesta.Tenga en cuenta que el bucle
while
se rompe si hemos encontradon_saved
tal quen - n_saved > 5
, ya que este es el valor más grande posible den
que no se puede comprar en una cantidad exacta según el teorema.