IPC

Universidad de San Carlos

Segundo semestre 2021


Semana 0 Scratch

Semana 1 C

Semana 2 Arrays

Semana 3 Algoritmos

Semana 4 Memoria

Semana 6 Python

Proyecto Final


Programa de estudios

Horas de oficina

Conjuntos de problemas

Preguntas Frecuentes


IDE

Manual

Scrath

Guías de estilo

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63fd8be9-afbf-4e82-8e87-5fc4a2b5deca/Untitled.png

Cash


Monedas para centavos de Guatemala

Monedas para centavos de Guatemala

Algoritmo voraz:


Al hacer momento de dar un "vuelto" o "cambio", lo más probable es que desee minimizar la cantidad de monedas que está dando a cada cliente, no sea que se acaben (¡y esto molestará al cliente!). Afortunadamente, la informática les ha dado a los cajeros de todo el mundo formas de minimizar el número de monedas para dar, por medio de algo conocido como: algoritmo voraz.

Según el Instituto Nacional de Estándares y Tecnología (NIST por sus siglas en inglés), un algoritmo voraz es uno que “siempre toma la mejor solución inmediata o local mientras encuentra una respuesta. Los algoritmos voraces encuentran la solución óptima general o global para algunos problemas, pero pueden encontrar soluciones menos óptimas para algunos casos en otros problemas ".

¿Qué significa todo eso? Bueno, supongamos que un cajero le debe un vuelto a un cliente y en el cajero hay monedas de 25 centavos, 10 centavos, 5 centavos y 1 centavo. El problema a resolver es decidir qué monedas y cuántas de cada una hay que entregar al cliente. Piense en un cajero "codicioso" como uno que quiere sacar el mayor provecho posible de este problema con cada moneda que saca. Por ejemplo, si a algún cliente se le deben 41 centavos, la primera opción (es decir, el mejor inmediato o local) que se puede tomar es utilizar monedas de 25 centavos. (Ese camino es "mejor" en la medida en que nos acerca a los 0 centavos más rápido que cualquier otra moneda). Tenga en cuenta que tomar una moneda de este tamaño reduciría lo que era un problema de 41 centavos a un problema de 16 centavos, ya que 41 - 25 = 16. Es decir, el resto es un problema similar pero menor. No hace falta decir que otra moneda de 25 centavos sería demasiado grande (suponiendo que el cajero prefiera no perder dinero), por lo que nuestro codicioso cajero pasaría a tomar la opción de la moneda de 10 centavos, dejándolo con un problema de 6 centavos. En ese punto, para satisfacer la codicia del cajero se requiere una moneda de 5 centavos, seguido de una moneda de 1 centavo, momento en el que el problema se resuelve. El cliente recibe una moneda de 25 centavos, una moneda de 10 centavos, una moneda de 5 centavos y una moneda de 1 centavo: 4 monedas en total.

Resulta que este enfoque (es decir, el tipo de algoritmo) no solo es óptimo a nivel local, sino también a nivel global, para muchos tipos de monedas de diferentes países. Es decir, siempre y cuando un cajero tenga suficiente de cada moneda (25, 10, 5 y 1 centavos), esta solución de mayor a menor producirá la menor cantidad de monedas posible para devolver. ¿Cuán pocas? Bueno, ¡cuéntanos tú!

Detalles de la Implementación:


En un archivo llamado cash.c en la carpeta ~/pset1/cash, escriba un programa que primero pregunte al usuario cuánto cambio se le debe y luego que imprima el número mínimo de monedas con las que se puede realizar ese cambio.

int centavos = round(quetzales * 100);

Su programa debería tener un comportamiento como el que se ve en los siguiente ejemplos.

$ ./cash
Cambio: 0.41
4
$ ./cash
Cambio: -0.41
Cambio: 
Cambio: 0.41
4

Tutorial

Cash.mp4

¿Cómo probar el código?


¿Su programa tiene el comportamiento deseado cuando se ingresa?

Cómo enviar


Envíe este formulario.