Hola querido lector, hoy es cuando he tenido más tiempo, y lo he aprovechado para hacer un reto de aceptaelreto.com, la verdad ha sido un reto del cual todo gira alrededor de la formula:
litros de la piscina = litros de las piscina +(litros del barreño-litros que pierde)
Debemos de tener cuidado con el tema de que lo que se pierda debe de ser superior que lo que se añade al barreño, de lo contrario, eso empezará a hacer un bucle infinito, debido a la naturaleza del código.
Con todo esto explicado, vamos a leer el ejercicio:
Se acerca el verano y llega el momento de sacar de los armarios y trasteros las piscinas para los niños (y no tan niños), colocarlas en la terraza, patio o jardín y llenarlas de agua para que los pequeños de la casa puedan empezar a disfrutarlas.
Este año la tarea se presenta complicada porque durante el invierno la larga manguera que permitía llevar el agua desde el grifo de la cocina hasta la propia piscina se ha perdido y habrá que hacerlo con un barreño…
Para complicar aún más las cosas, también durante el invierno la piscina (a pesar de ser de fibra de vidrio) se ha pinchado y pierde un poco de agua. Aún así, como los pequeños están ansiosos por darse un chapuzón decidimos llenarla cuanto antes, con pinchazo incluido, y luego mientras ellos disfrutan lo arreglaremos. Dado que la piscina está perdiendo agua constantemente, estará llena únicamente durante un instante de tiempo. En ese preciso momento dejaremos de hacer viajes a la cocina y nos pondremos rápidamente a arreglarla.
Como dice el refrán «mal de mucho consuelo de tontos»; la tarea de llenado será un poco más llevadera gracias al consuelo de saber que nuestro vecino está en la misma situación. A través del seto del jardín podemos verle haciendo viajes como un loco de su cocina a su piscina, para compensar el pinchazo que también él tiene. La pregunta es ¿quién tardará menos en llenar la piscina?
La entrada estará compuesta de múltiples casos de prueba, cada uno en una línea.
Cada uno de los casos de prueba empezará con la descripción de una «competición» entre nosotros y el vecino. Los tres primeros números indican los litros de agua de nuestra piscina (1≤ p ≤ 109), el número de litros de nuestro barreño (1 ≤ b ≤ 109) y por último los litros de agua que la piscina pierde durante el viaje. A continuación aparecen tres números para indicar la misma información pero de nuestro vecino.
La entrada termina cuando alguna de las piscinas no tiene capacidad (aparece a cero).
Salida
Para cada caso de prueba aparecerá una línea compuesta por el ganador y el número de viajes que ha realizado. Como ganador, se indicará YOsi nosotros terminamos antes de llenar la piscina (hacemos menos viajes para conseguirlo) y VECINO si es el vecino. En caso de empate, se indicará EMPATE.
10 5 1 15 6 1
50 5 1 50 5 0
50 5 1 50 5 6
0 0 0 0 0 0
Aquí os dejo mi código:
try {
float litrosPiscinaV1, litrosBarrenoV1, litrosPierdeV1;
float litrosPiscinaV2, litrosBarrenoV2, litrosPierdeV2;
boolean repetir = true;
String cadena = «»;
String[] datos;
float[] datosFloat;
Scanner sca = new Scanner(System.in);
System.out.println(«Dime los datos con espacios (litrosPiscina1 litrosBarreño1 litrosPierde1 litrosPiscina2 litrosBarreño2 litrosPierde2):»);
cadena = sca.nextLine();
datos = cadena.split(» «);
if (datos.length != 6) {
throw new Exception(«Debes de poner 6 datos»);
}
datosFloat = new float[datos.length];
for (int i = 0; i < datos.length; i++) {
datosFloat[i] = Float.parseFloat(datos[i]);
}
litrosPiscinaV1 = datosFloat[0];
litrosBarrenoV1 = datosFloat[1];
litrosPierdeV1 = datosFloat[2];
litrosPiscinaV2 = datosFloat[3];
litrosBarrenoV2 = datosFloat[4];
litrosPierdeV2 = datosFloat[5];
if (litrosBarrenoV2 >= litrosPierdeV2 && litrosBarrenoV2 >= litrosPierdeV2) {
throw new Exception(«Los litros que pierden debe de ser superior a los del barreño»);
}
do {
litrosPiscinaV1 = litrosPiscinaV1 + (litrosBarrenoV1 – litrosPierdeV1);
litrosPiscinaV2 = litrosPiscinaV2 + (litrosBarrenoV2 – litrosPierdeV2);
if (litrosPiscinaV1 < 0 | litrosPiscinaV2 < 0) {//se repetirá hasta que al menos uno sea menor a cero
repetir = false;
}
} while (repetir);
if (litrosPiscinaV1 == litrosPiscinaV2) {
System.out.println(«Empate»);
} else if (litrosPiscinaV1 > litrosPiscinaV2) {
System.out.println(«Vecino 1»);
} else if (litrosPiscinaV1 < litrosPiscinaV2) {
System.out.println(«Vecino 2»);
}
} catch (Exception ex) {
System.out.println(«Debes de poner 6 números separados con espacios cod: » +ex.getMessage());
}
Espero que os haya gustado y hayáis aprendido algo, si quieres saber cuando subo un nuevo contenido, puedes seguirme en mi página de Facebook o en mi Twitter.
FUENTE:
https://www.aceptaelreto.com/problem/statement.php?id=131
Me gusta esto:
Me gusta Cargando...
Relacionado
Gracias por visitar mi blog de informática, mi nombre es Tomás y soy formador y desarrollador web. Si quiere usted dejarme alguna sugerencia, ayuda o quiere un servicio de formación estoy escuchando ofertas en tomas.gonzalez@infogonzalez.com, en Facebook a https://www.facebook.com/Infogonzalez estoy deseando escucharle. Su duda o sugerencia NO molesta.