给定直角三角形的一侧,请检查是否存在与三角形的任何其他两个侧面都可能存在的直角三角形。如果可能的话,打印其他两面的长度以及三角形的所有角度。
例子:
Input : a = 12
Output : Sides are a = 12, b = 35, c = 37
Angles are A = 18.9246, B = 71.0754, C = 90
Explanation: a = 12, b = 35 and c = 37 form right
angle triangle because
12*12 + 35*35 = 37*37
Input : a = 6
Output : Sides are a = 6, b = 8, c = 10
Angles are A = 36.8699, B = 53.1301, C = 90
检查三角形是否存在并找到Sides的方法:
为了解决这个问题,我们首先观察毕达哥拉斯方程。如果a和b是直角三角形的边的长度,而c是斜边的长度,则边的长度的平方之和等于斜边的长度的平方。
此关系由以下公式表示:
a*a + b*b = c*c
情况1: a是一个奇数:给定a,找到b和c
c2 - b2 = a2
OR
c = (a2 + 1)/2;
b = (a2 - 1)/2;
上述解决方案仅在a为奇数的情况下有效,因为a2 + 1仅对奇数a可被2整除。
情况2: a为偶数:cb为2&c + b为(a2)/ 2
c-b = 2 & c+b = (a2)/2
Hence,
c = (a2)/4 + 1;
b = (a2)/4 - 1;
当a为偶数时有效。
查找角度的方法:
首先找到三角形的所有边。然后应用“ SSS”规则,即余弦定律:
下面是上述方法的实现:
C++
// C++ program to print all sides and angles of right
// angle triangle given one side
#include
#include
using namespace std;
#define PI 3.1415926535
// Function to find angle A
// Angle in front of side a
double findAnglesA(double a, double b, double c)
{
// applied cosine rule
double A = acos((b * b + c * c - a * a) / (2 * b * c));
// convert into degrees
return A * 180 / PI;
}
// Function to find angle B
// Angle in front of side b
double findAnglesB(double a, double b, double c)
{
// applied cosine rule
double B = acos((a * a + c * c - b * b) / (2 * a * c));
// convert into degrees and return
return B * 180 / PI;
}
// Function to print all angles
// of the right angled triangle
void printAngles(int a, int b, int c)
{
double x = (double)a;
double y = (double)b;
double z = (double)c;
// for calculate angle A
double A = findAnglesA(x, y, z);
// for calculate angle B
double B = findAnglesB(x, y, z);
cout << "Angles are A = " << A << ", B = " <<
B << ", C = " << 90 << endl;
}
// Function to find other two sides of the
// right angled triangle
void printOtherSides(int n)
{
int b,c;
// if n is odd
if (n & 1)
{
// case of n = 1 handled separately
if (n == 1)
cout << -1 << endl;
else
{
b = (n*n-1)/2;
c = (n*n+1)/2;
cout << "Side b = " << b
<< ", Side c = " << c << endl;
}
}
else
{
// case of n = 2 handled separately
if (n == 2)
cout << -1 << endl;
else
{
b = n*n/4-1;
c = n*n/4+1;
cout << "Side b = " << b
<< ", Side c = " << c << endl;
}
}
// Print angles of the triangle
printAngles(n,b,c);
}
// Driver Program
int main()
{
int a = 12;
printOtherSides(a);
return 0;
}
Java
// Java program to print all sides and angles of right
// angle triangle given one side
import java.io.*;
class GFG {
static double PI = 3.1415926535;
// Function to find angle A
// Angle in front of side a
static double findAnglesA(double a, double b, double c)
{
// applied cosine rule
double A = Math.acos((b * b + c * c - a * a) / (2 * b * c));
// convert into degrees
return A * 180 / PI;
}
// Function to find angle B
// Angle in front of side b
static double findAnglesB(double a, double b, double c)
{
// applied cosine rule
double B = Math.acos((a * a + c * c - b * b) / (2 * a * c));
// convert into degrees and return
return B * 180 / PI;
}
// Function to print all angles
// of the right angled triangle
static void printAngles(int a, int b, int c)
{
double x = (double)a;
double y = (double)b;
double z = (double)c;
// for calculate angle A
double A = findAnglesA(x, y, z);
// for calculate angle B
double B = findAnglesB(x, y, z);
System.out.println( "Angles are A = " + A + ", B = " +
B + ", C = " + 90);
}
// Function to find other two sides of the
// right angled triangle
static void printOtherSides(int n)
{
int b=0,c=0;
// if n is odd
if ((n & 1)>0)
{
// case of n = 1 handled separately
if (n == 1)
System.out.println( -1);
else
{
b = (n*n-1)/2;
c = (n*n+1)/2;
System.out.println( "Side b = " + b
+ ", Side c = " + c );
}
}
else
{
// case of n = 2 handled separately
if (n == 2)
System.out.println( -1);
else
{
b = n*n/4-1;
c = n*n/4+1;
System.out.println( "Side b = " + b
+ ", Side c = " + c);
}
}
// Print angles of the triangle
printAngles(n,b,c);
}
// Driver Program
public static void main (String[] args) {
int a = 12;
printOtherSides(a);
}
}
// This code is contributed
// by inder_verma..
Python 3
# Python 3 program to print all
# sides and angles of right
# angle triangle given one side
import math
PI = 3.1415926535
# Function to find angle A
# Angle in front of side a
def findAnglesA( a, b, c):
# applied cosine rule
A = math.acos((b * b + c * c - a * a) /
(2 * b * c))
# convert into degrees
return A * 180 / PI
# Function to find angle B
# Angle in front of side b
def findAnglesB(a, b, c):
# applied cosine rule
B = math.acos((a * a + c * c - b * b) /
(2 * a * c))
# convert into degrees
# and return
return B * 180 / PI
# Function to print all angles
# of the right angled triangle
def printAngles(a, b, c):
x = a
y = b
z = c
# for calculate angle A
A = findAnglesA(x, y, z)
# for calculate angle B
B = findAnglesB(x, y, z)
print("Angles are A = ", A,
", B = ", B , ", C = ", "90 ")
# Function to find other two sides
# of the right angled triangle
def printOtherSides(n):
# if n is odd
if (n & 1) :
# case of n = 1 handled
# separately
if (n == 1):
print("-1")
else:
b = (n * n - 1) // 2
c = (n * n + 1) // 2
print("Side b = ", b,
" Side c = ", c)
else:
# case of n = 2 handled
# separately
if (n == 2) :
print("-1")
else:
b = n * n // 4 - 1;
c = n * n // 4 + 1;
print("Side b = " , b,
", Side c = " , c)
# Print angles of the triangle
printAngles(n, b, c)
# Driver Code
if __name__ == "__main__":
a = 12
printOtherSides(a)
# This code is contributed
# by ChitraNayal
C#
// C# program to print all sides
// and angles of right angle
// triangle given one side
using System;
class GFG
{
static double PI = 3.1415926535;
// Function to find angle A
// Angle in front of side a
static double findAnglesA(double a,
double b, double c)
{
// applied cosine rule
double A = Math.Acos((b * b + c *
c - a * a) /
(2 * b * c));
// convert into degrees
return A * 180 / PI;
}
// Function to find angle B
// Angle in front of side b
static double findAnglesB(double a,
double b, double c)
{
// applied cosine rule
double B = Math.Acos((a * a + c *
c - b * b) /
(2 * a * c));
// convert into degrees and return
return B * 180 / PI;
}
// Function to print all angles
// of the right angled triangle
static void printAngles(int a, int b, int c)
{
double x = (double)a;
double y = (double)b;
double z = (double)c;
// for calculate angle A
double A = findAnglesA(x, y, z);
// for calculate angle B
double B = findAnglesB(x, y, z);
Console.WriteLine( "Angles are A = " +
A + ", B = " +
B + ", C = " + 90);
}
// Function to find other two sides
// of the right angled triangle
static void printOtherSides(int n)
{
int b = 0, c = 0;
// if n is odd
if ((n & 1) > 0)
{
// case of n = 1 handled separately
if (n == 1)
Console.WriteLine( -1);
else
{
b = (n * n - 1) / 2;
c = (n * n + 1) / 2;
Console.WriteLine( "Side b = " + b
+ ", Side c = " + c);
}
}
else
{
// case of n = 2 handled separately
if (n == 2)
Console.WriteLine( -1);
else
{
b = n * n / 4 - 1;
c = n * n / 4 + 1;
Console.WriteLine( "Side b = " + b +
", Side c = " + c);
}
}
// Print angles of the triangle
printAngles(n, b, c);
}
// Driver Code
public static void Main ()
{
int a = 12;
printOtherSides(a);
}
}
// This code is contributed
// by inder_verma
PHP
输出:
Side b = 35, Side c = 37
Angles are A = 18.9246, B = 71.0754, C = 90