Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/01/2012, 07:29
tete69
 
Fecha de Ingreso: enero-2012
Mensajes: 2
Antigüedad: 12 años, 3 meses
Puntos: 0
Problema con cajero automático

Hola a todos!
Me ha surgido un problema con un código y no le encuentro solución posible...

El objetivo es crear un cajero automático que entregue una cantidad determinada con el mínimo número de billetes posible. El algoritmo, que parece sencillo en un principio, se complica cuando cambiamos la disponibilidad de ciertos billetes:

Código PHP:
<?

$x
=0;

$n=$_POST['cantidad'];

if(
$_POST['500']==true){$x=$x+1;$moneda[$x]='B500';$valor[$x]=500;}

if(
$_POST['200']==true){$x=$x+1;$moneda[$x]='B200';$valor[$x]=200;}

if(
$_POST['100']==true){$x=$x+1;$moneda[$x]='B100';$valor[$x]=100;}

if(
$_POST['50']==true){$x=$x+1;$moneda[$x]='B50';$valor[$x]=50;}

if(
$_POST['20']==true){$x=$x+1;$moneda[$x]='B20';$valor[$x]=20;}

if(
$_POST['10']==true){$x=$x+1;$moneda[$x]='B10';$valor[$x]=10;}

for (
$p=1;$p<=$x;$p=$p+1)

 {while (
$valor[$p]<=$n)

     {
$cambio[$p]=$cambio[$p]+1;

       
$n=$n-$valor[$p];

     }

 }

for (
$p=1;$p<=$x;$p=$p+1) {print $moneda[$p] ; print ":"; print $cambio[$p];print "---";}

?>
Dónde n es la cantidad a entregar. El fallo aparece en muchos casos, por ejemplo:

billetes disponibles{200,50,20}
n=210
Y otros similares...

Creo que la solución es recursiva, pero voy bastante mal y agradeceria que si alguien da con una solución me pudiera guiar un poco.

Gracias por vuestra atención y tiempo ;)