Título: Problema de Cambio de monedas Publicado por: GAticoxx en 4 Noviembre 2017, 04:09 am 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"); } } } |