Dadas el área y la hipotenusa, el objetivo es imprimir todos los lados si puede existir un triángulo rectángulo, de lo contrario, imprimir -1. Necesitamos imprimir todos los lados en orden ascendente.
Ejemplos:
Input : 6 5 Output : 3 4 5 Input : 10 6 Output : -1
Hemos discutido una solución a este problema en la publicación a continuación.
Encuentra todos los lados de un triángulo rectángulo a partir de la hipotenusa y el área dadas | Conjunto 1
En esta publicación, se analiza una nueva solución con la siguiente lógica.
Sean a y b los dos lados desconocidos
Área : A = 0.5 * a * b
Hipotenusa Cuadrado : H^2 = a^2 + b^2
Sustituyendo b, obtenemos H 2 = a 2 + (4 * A 2 )/ a 2
Al reordenar, obtenemos la ecuación a 4 – (H 2 )(a 2 ) + 4*(A 2 )
El discriminante D de esta ecuación sería D = H 4 – 16*(A 2 )
Si D = 0, entonces las raíces están dadas por la fórmula de la ecuación lineal, raíces = (-b +- sqrt(D))/2*a
estas raíces serían iguales al cuadrado de los lados, encontrar las raíces cuadradas nos daría los lados.
C++
// C++ program to check existence of // right triangle. #include <bits/stdc++.h> using namespace std; // Prints three sides of a right triangle // from given area and hypotenuse if triangle // is possible, else prints -1. void findRightAngle(int A, int H) { // Descriminant of the equation long D = pow(H, 4) - 16 * A * A; if (D >= 0) { // applying the linear equation // formula to find both the roots long root1 = (H * H + sqrt(D)) / 2; long root2 = (H * H - sqrt(D)) / 2; long a = sqrt(root1); long b = sqrt(root2); if (b >= a) cout << a << " " << b << " " << H; else cout << b << " " << a << " " << H; } else cout << "-1"; } // Driver code int main() { findRightAngle(6, 5); } // This code is contributed By Anant Agarwal.
Java
// Java program to check existence of // right triangle. class GFG { // Prints three sides of a right triangle // from given area and hypotenuse if triangle // is possible, else prints -1. static void findRightAngle(double A, double H) { // Descriminant of the equation double D = Math.pow(H, 4) - 16 * A * A; if (D >= 0) { // applying the linear equation // formula to find both the roots double root1 = (H * H + Math.sqrt(D)) / 2; double root2 = (H * H - Math.sqrt(D)) / 2; double a = Math.sqrt(root1); double b = Math.sqrt(root2); if (b >= a) System.out.print(a + " " + b + " " + H); else System.out.print(b + " " + a + " " + H); } else System.out.print("-1"); } // Driver code public static void main(String arg[]) { findRightAngle(6, 5); } } // This code is contributed by Anant Agarwal.
Python3
# Python program to check existence of # right triangle. from math import sqrt # Prints three sides of a right triangle # from given area and hypotenuse if triangle # is possible, else prints -1. def findRightAngle(A, H): # Descriminant of the equation D = pow(H,4) - 16 * A * A if D >= 0: # applying the linear equation # formula to find both the roots root1 = (H * H + sqrt(D))//2 root2 = (H * H - sqrt(D))//2 a = int(sqrt(root1)) b = int(sqrt(root2)) if b >= a: print (a, b, H) else: print (b, a, H) else: print ("-1") # Driver code # Area is 6 and hypotenuse is 5. findRightAngle(6, 5)
C#
// C# program to check existence of // right triangle. using System; class GFG { // Prints three sides of a right triangle // from given area and hypotenuse if triangle // is possible, else prints -1. static void findRightAngle(double A, double H) { // Descriminant of the equation double D = Math.Pow(H, 4) - 16 * A * A; if (D >= 0) { // applying the linear equation // formula to find both the roots double root1 = (H * H + Math.Sqrt(D)) / 2; double root2 = (H * H - Math.Sqrt(D)) / 2; double a = Math.Sqrt(root1); double b = Math.Sqrt(root2); if (b >= a) Console.WriteLine(a + " " + b + " " + H); else Console.WriteLine(b + " " + a + " " + H); } else Console.WriteLine("-1"); } // Driver code public static void Main() { findRightAngle(6, 5); } } // This code is contributed by vt_m.
PHP
<?php // PHP program to check existence of // right triangle. // Prints three sides of a right triangle // from given area and hypotenuse if // triangle is possible, else prints -1. function findRightAngle($A, $H) { // Descriminant of the equation $D = pow($H, 4) - 16 * $A * $A; if ($D >= 0) { // applying the linear equation // formula to find both the roots $root1 = ($H * $H + sqrt($D)) / 2; $root2 = ($H * $H - sqrt($D)) / 2; $a = sqrt($root1); $b = sqrt($root2); if ($b >= $a) echo $a , " ", $b , " " , $H; else echo $b , " " , $a , " " , $H; } else echo "-1"; } // Driver code findRightAngle(6, 5); // This code is contributed By Anuj_67 ?>
Javascript
<script> // Javascript program to check existence of // right triangle. // Prints three sides of a right triangle // from given area and hypotenuse if triangle // is possible, else prints -1. function findRightAngle(A,H) { // Descriminant of the equation let D = Math.pow(H, 4) - 16 * A * A; if (D >= 0) { // applying the linear equation // formula to find both the roots let root1 = (H * H + Math.sqrt(D)) / 2; let root2 = (H * H - Math.sqrt(D)) / 2; let a = Math.sqrt(root1); let b = Math.sqrt(root2); if (b >= a) document.write(a + " " + b + " " + H+"<br/>"); else document.write(b + " " + a + " " + H+"<br/>"); } else document.write("-1"); } // Driver code findRightAngle(6, 5); // This code contributed by Rajput-Ji </script>
Producción:
3 4 5
Complejidad de tiempo: O (logn) desde el uso de funciones sqrt y pow incorporadas
Espacio Auxiliar: O(1)
Este artículo es una contribución de Harshit Agrawal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA