Problema de Cambio de monedas

Iniciado por GAticoxx, 4 Noviembre 2017, 04:09 AM

0 Miembros y 1 Visitante están viendo este tema.

GAticoxx

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");
        }

    }
}