Comprueba si es posible un triángulo rectángulo a partir del área y la hipotenusa dadas

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *