Devolver el cambio de una compra, calculando el cambio con el menor número posible de billetes y monedas. Supongamos no manejamos céntimos (solo euros) y que tenemos una cantidad ilimitada de monedas (de 2 y 1 €) y billetes (de 500, 200, 100, 50, 20, 10 y 5 €)
int compra = 70 ;
int importe = 73 ;
int devolucion = importe - compra;
int [] tipo_billete = { 500 , 200 , 100 , 50 , 20 , 10 , 5 , 2 , 1 };
int [] cantidad_billete_devuelto = new int [ 9 ];
const string EUR = "EUR" ;
if (devolucion < 0 )
{
throw new Exception ( "Falta dinero por pagar" );
}
for ( int i = 0 ; i < tipo_billete.Length && devolucion > 0 ; i ++ )
{
if (tipo_billete[i] <= devolucion)
{
cantidad_billete_devuelto[i] = devolucion / tipo_billete[i];
// resto de la división
devolucion %= tipo_billete[i];
}
}
/*
for (int i = 0; i < tipo_billete.Length; i++)
{
while (devolucion >= tipo_billete[i])
{
cantidad_billete_devuelto[i]++;
devolucion -= tipo_billete[i];
}
}
*/
Console. WriteLine ( $"Compra: { compra } { EUR } \n Importe: { importe } { EUR } \n Devolución: { importe - compra } { EUR }" );
for ( int i = 0 ; i < cantidad_billete_devuelto.Length; i ++ )
{
if (cantidad_billete_devuelto[i] > 0 )
{
if (i <= 6 )
{
Console. WriteLine ( $" \t Billete de { tipo_billete [ i ]} { EUR }: { cantidad_billete_devuelto [ i ]}" );
}
else
{
Console. WriteLine ( $" \t Moneda de { tipo_billete [ i ]} { EUR }: { cantidad_billete_devuelto [ i ]}" );
}
}
}