Una terna de pitagórica es un conjunto de tres números naturales, a < b < c , para el cual:
a 2 + b 2 = c 2
Por ejemplo, 3 2 + 4 2 = 9 + 16 = 25 = 5 2
Existe exactamente una terna de pitagórica para la que a + b + c = 1000.
Encuentra el producto ABC .
Encuentra el producto ABC .
Solución a partir de un ciclo for y while:
Otro caso, en el que entender el problema fue otro reto más a parte de solucionarlo, obvio por mi falta de comprensión en la lógica estipulada...
Posiblemente, lo mejor era seguir la fórmula para determinan a,b,c, pero en su defecto, creé lo primero que vino a mi mente: 3 contadores.
1.- Se declara una variable boolean (bandera) en false y que se activará en cuanto haya encontrado el resultado.
2.- Inician los ciclos for, primero será para c, cuyo máximo valor podría ser 997, esto, para cumplir con la regla de que a debe ser menor que b, y a su vez, b debe ser menor que c, por lo cual, el máximo número del 1-1000 podría ser 997 (recordando que la suma de las 3 variables debe ser 1,000). Después inicia b, que siguiendo con la condición citada, el máximo número que podría tener sería de 499. Finalmente, sería para a mientras sea menor que 332. En cada uno de los ciclos, también se añade la restricción de que se mantendrán mientras bandera siga en false.
Nota:
Las variables son acomodadas en este orden para agilizar el recorrido de los ciclos, ya que en primer caso, recorrería la variable que tiene un número máximo más bajo.
3.- Una vez dentro de los ciclos inicia la condición, si la suma de las tres variables es igual a 1,000, entrará en una segunda condición (ya que puede darse el caso, de que esta combinación, aunque su suma sea igual a mil, no sea el de la terna buscada), si el cuadrado de a más el cuadrado de b es igual al cuadrado de c, sabemos que encontramos la terna pitagórica, bandera cambiará a true para terminar con los ciclos, se imprimirán a,b,c con sus valores finales, y se imprimirá directamente la multiplicación de las 3 variables.
Código JAVA:
public class problemanueve {
public static void main(String[] args) {
boolean bandera=false;
for (int c=1; c<997 && !bandera; c++) {
for (int b = 1; b<499 && !bandera; b++){
for (int a = 1; a<332 && !bandera; a++){
if (a+b+c == 1000){
if (a*a + b*b == c*c){
bandera = true;
System.out.println("a=" + a + " b=" + b + " c=" + c);
System.out.println("El producto es: " + (a*b*c));
}
}
}
}
}
}
}
No hay comentarios:
Publicar un comentario