Hmmmm ... Tengo un algoritmo rondando por ahi para eso mismo. Greedy Algorithm.
Lo busque pero no lo encontre ... bueno, la idea es hacer uso del operando % que significa modulus, el restante de una division.
¿Como usarlo?
NOTA: EL CODIGO ES EN PHP, PERO ES FACIL PASARLO A JAVA (CREI QUE HABIA POSTEADO ESTO EN PHP)
Código PHP:
Ver originalDigamos que el usuario solicita 1460, haces:
$billetes100 = $cantidad%100; // devolvera 14
$cantidad = $cantidad - ($billetes100*100);
$billetes50 = $cantidad%50; //devuelve 1
$cantidad = $cantidad - ($billetes50*50);
$billetes20 = $cantidad%20; //devuelve 0
$cantidad = $cantidad - ($billetes20*20);
$billetes10 = $cantidad%10; //devuelve 1
Total: 14 billetes de 100, 1 de 50, 1 de 10.
Ahora bien, asi como te lo mostre es un ejemplo. La forma en que lo implemente fue poniendo las papeletas en un array y use un bucle while para hacerlo mas "automatizado" y "bonito" el codigo.
EDIT: Lo encontre rondando en mi correo, obvia las partes que no son necesarias:
Código PHP:
Ver original<?php
function greedyAlgorithm($cantidad, $papeletas = null) {
$resto = $cantidad;
$i = 0;
while($resto != 0) {
$nuevas[$papeletas[$i]] = floor($resto/$papeletas[$i]); $resto %= $papeletas[$i];
$i++;
}
return $nuevas;
}
$nuevas = greedyAlgorithm
(1460, array(100,50,20,10));
echo '<pre>';
echo '</pre>';
?>
Resultado:
Cita: array(4) {
[100]=>
float(14)
[50]=>
float(1)
[20]=>
float(0)
[10]=>
float(1)
}