import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int p;
String entrada;
do {
try {
System.out.println("Introduzca el precio (con sus decimales, se permite multiplos de 5 sin decimales):");
entrada = br.readLine();
// controlar que el precio sea multiplo de 5 por string ya que no funciona %5 y debe ser multiplo o las vueltas son estafadas
if (entrada.substring(entrada.length() - 1, entrada.length()).equals("0") || entrada.substring(entrada.length() - 1, entrada.length()).equals("5")) {
p = (int) (Double.parseDouble(entrada) * 100);
int a = 0;
do {
System.out.println("Introduzca las monedas con sus decimales:");
// No se controla monedas ANORMALES como 0.35, entiendo que el usuario ha introducido una de 0.20 + 0.10 + 0.05
//ya que para controlar las monedas existentes reales tendría que añadir una parrafada de if o switch al no poder usar array
entrada = br.readLine();
int pa = (int) (Double.parseDouble(entrada) * 100);
if (pa <= 200 && pa >= 5) {
if (entrada.substring(entrada.length() - 1, entrada.length()).equals("0") || entrada.substring(entrada.length() - 1, entrada.length()).equals("5")) {
a += pa;
} else {
System.out.println("Moneda no válida, sólo se admiten monedas múltiplos de 5");
}
} else {
System.out.println("Moneda no válida, sólo se admiten monedas de 0.05 a 2.00 euros");
}
} while (p > a);
if (p != a) {
a = a - p;
int c = 0;
// incorporo posibilidad de 2€ por si las moscas
while (a >= 200) {
a -= 200;
c++;
}
if (c != 0) {
System.out.println("Devolver " + c + " moneda(s) de 2.00€");
}
c = 0;
while (a >= 100) {
a -= 100;
c++;
}
if (c != 0) {
System.out.println("Devolver " + c + " moneda(s) de 1.00€");
}
c = 0;
while (a >= 50) {
a -= 50;
c++;
}
if (c != 0) {
System.out.println("Devolver " + c + " moneda(s) de 0.50€");
}
c = 0;
while (a >= 20) {
a -= 20;
c++;
}
if (c != 0) {
System.out.println("Devolver " + c + " moneda(s) de 0.20€");
}
c = 0;
while (a >= 10) {
a -= 10;
c++;
}
if (c != 0) {
System.out.println("Devolver " + c + " moneda(s) de 0.10€");
}
c = 0;
while (a >= 5) {
a -= 5;
c++;
}
if (c != 0) {
System.out.println("Devolver " + c + " moneda(s) de 0.05€");
}
}
System.out.println("Gracias por su compra.");
} else {
p = 0;
System.out.println("El valor ha de ser múltiplo de 5.");
}
} catch (IOException e) {
p = 0;
System.out.println("El valor ha de ser numérico.");
}
} while (p == 0);
}
}
here[/aux_code]