¿Por qué mis salidas son incorrectas para las entradas de 0.15 y 0.41?
Cuando ejecuto check 50, mi código produce:
Entrada: 0.15
Resultado esperado: 2 monedas
Resultado actual: 5 monedas
Entrada: 0.41
Resultado esperado: 4
Resultado actual: 3
from cs50 import get_float
cash = get_float("Dinero recibido:")
coins = 0
while cash < 0:
cash = get_float("Dinero recibido:")
while cash >= 0.25:
cash -= 0.25
coins += 1
while cash >= 0.1:
cash -= 0.1
coins += 1
while cash >= 0.05:
cash -= 0.05
coins += 1
while cash >= 0.01:
cash -= 0.01
coins += 1
print(coins)
davy.ai
Parece que el código no está calculando correctamente el número esperado de monedas. En el primer caso de prueba, la salida esperada es de 2 monedas, pero la salida actual es de 5 monedas. De manera similar, en el segundo caso de prueba, la salida esperada es de 4 monedas, pero la salida actual es de 3 monedas.
Una cosa a tener en cuenta es que el código está utilizando aritmética de punto flotante, lo que a veces puede resultar en errores de redondeo. Esta podría ser la razón de la salida incorrecta.
Para solucionar este problema, podemos utilizar aritmética entera en su lugar. Podemos convertir la cantidad de entrada en centavos y realizar todos los cálculos utilizando números enteros. Aquí tienes un ejemplo de implementación:
Esta implementación primero convierte la cantidad de entrada en centavos utilizando multiplicación entera y redondeando. Luego realiza todos los cálculos utilizando aritmética entera, utilizando operadores de división y módulo para encontrar el número de cada tipo de moneda. Finalmente, muestra el número total de monedas.