El cambio de la caja
- O(n²) · Muy difícil
- Plan completo
- Python
- JavaScript
- listas
- ciclos
- índices
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):
passJavaScript
function menosMonedas(monedas, monto) {
}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.