Buenas tardes, necesito algun metodo para limitar la cantidad de monedas que tenga para dar cambio, partiendo del siguiente codigo en voraces.
//Codigo
package cambio;
public class Cambio {
public void Voraz(int s[], double v[], double cambio) {
double x;
int i = 0;
while (!Solucion(s, v, cambio) && i < s.length) {
//Seleccionar moneda
x = v;
if (Factible(s, v, cambio, x)) //inserta moneda
{
s++;
} else //rechaza moneda
{
i++;
}
}
}
public boolean Solucion(int s[], double v[], double cambio) {
double suma = 0.0;
for (int i = 0; i < s.length; i++) {
suma += s * v;
}
suma = Math.rint(suma * 100) / 100;
if (suma == cambio) {
return true;
} else {
return false;
}
}
public boolean Factible(int s[], double v[], double cambio, double x) {
double suma = 0.0;
for (int i = 0; i < s.length; i++) {
suma += s * v;
}
suma = suma + x;
suma = Math.rint(suma * 100) / 100;
if (suma <= cambio) {
return true;
} else {
return false;
}
}
}
package cambio;
import java.util.Scanner;
public class DarCambio {
public static void main(String[] args) {
int s[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
double v[] = {200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.01};
Scanner entrada = new Scanner(System.in);
Cambio moneda = new Cambio();
double vuelto;
System.out.print("Ingrese cambio: ");
vuelto = entrada.nextDouble();
moneda.Voraz(s, v, vuelto);
if (moneda.Solucion(s, v, vuelto)) {
for (int i = 0; i < s.length; i++) {
if (s > 0 && v > 9) {
System.out.printf("%d Billetes de %.2f soles\n", s, v);
} else if (s > 0 && v < 10) {
System.out.printf("%d Monedas de %.2f soles\n", s, v);
}
}
} else {
System.out.println("No hay solucion");
}
}
}