Saltar al contenido

El cambio de la caja

Enunciado

Lupita atiende la caja de la nevería y la mitad del turno se le va contando cambio. De cada moneda que hay en la caja tiene todas las que quiera, y quiere entregar el cambio con el menor número de monedas posible: menos monedas es menos tiempo contando.

Escribe una función que reciba monedas, una lista de enteros positivos distintos con los valores que hay en la caja (vienen en cualquier orden y la lista puede venir vacía), y monto, un entero de 1 en adelante: lo que hay que devolver. Regresa la lista de las monedas del cambio, de menor a mayor, con una entrada por cada moneda que entrega. Si con esas monedas no se junta el monto exacto, regresa una lista vacía.

Con monedas de 1, 5, 10 y 25 y un monto de 40, el cambio son tres monedas: 5, 10 y 25.

Empezar por la moneda más grande no siempre sale bien. Con monedas de 1, 5, 10, 21 y 25 y un monto de 63, tres monedas de 21 lo dan exacto, mientras que dos de 25 dejan 13 pendientes y obligan a seis monedas.

Si dos maneras distintas usan el mismo número de monedas, regresa la que empieza con la moneda más chica; si en esa también empatan, la que siga con la más chica, y así con las que siguen. Con monedas de 1, 5, 6 y 10 y un monto de 11 hay dos maneras de dos monedas, una de 5 con 6 y otra de 1 con 10, y la que se regresa es 1 con 10.

El monto nunca pasa de 1000.

Ejemplos

  • El ejemplo

    [1, 5, 10, 25], 40 → [5, 10, 25]

  • La moneda más grande primero no sirve

    [1, 5, 10, 21, 25], 63 → [21, 21, 21]

  • Otra vez la más grande estorba

    [1, 10, 11], 20 → [10, 10]

  • No se puede dar ese cambio

    [5, 10], 3 → []

  • Las monedas vienen desordenadas

    [25, 1, 10, 5], 16 → [1, 5, 10]

Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.

Empiezas con esto

Python

def menos_monedas(monedas, monto):
    pass

JavaScript

function menosMonedas(monedas, monto) {
}
Resolver este reto

Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.

Más retos de O(n²)

Ver todos los retos →