es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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)
Tags:  ,

Answer

  1. Avatar for 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:

    from cs50 import get_float
    
    # convertir la cantidad de entrada en centavos
    cash = get_float("Cambio adeudado: ")
    while cash < 0:
        cash = get_float("Cambio adeudado: ")
    cents = int(round(cash * 100))
    
    # calcular el número de monedas
    coins = 0
    coins += cents // 25  # número de cuartos
    cents %= 25
    coins += cents // 10  # número de dimes
    cents %= 10
    coins += cents // 5   # número de nickels
    cents %= 5
    coins += cents        # número de pennies
    
    print(coins)
    

    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.

Comments are closed.