Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 직각 삼각형의 다른 두 변과 각 찾기

<시간/>

이 문제에서는 직각삼각형의 한 변을 나타내는 정수가 주어집니다. 한 변이 있는 직각 삼각형이 가능한지 확인해야 합니다. 가능하면 직각 삼각형의 다른 두 변과 각을 구하십시오.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

a = 5

출력

Sides : 5, 12, 13
Angles : 67.38, 22.62, 90

설명

직각의 변은 5 2 로 나타납니다. + 12 2 =13 2 그리고 이 변을 사용하여 각도를 찾을 수 있습니다. Sin -1 (5/13) 및 90 - 죄 -1 (5/13).

해결 방법

문제에 대한 간단한 해결책은 피타고라스 정리를 사용하는 것입니다. 직각 삼각형의 변이 피타고라스 정리를 따른다는 것을 알고 있습니다.

a2 + b2 = c2

여기서 b와 b는 삼각형의 변이고 c는 삼각형의 빗변입니다.

이를 사용하여 b와 c의 값을 계산합니다.

사례 1 - a가 짝수이면

c = (a2 + 4) + 1
b = (a2 + 4) - 1

사례 2 - a가 홀수이면

c = (a2 + 1)/ 2
c = (a2 - 1)/ 2

각도를 찾으려면 삼각형의 변을 찾고 이 값을 사용하여 cos 값을 찾아야 합니다.

cos(A) = b2 + c2 - a2 / 2bc
cos(B) = a2 + c2 - b2 / 2ac
cos(C) = a2 + b2 - c2 / 2ab

우리 솔루션의 작동을 설명하는 프로그램

#include <bits/stdc++.h>
#include <cmath>
using namespace std;
#define PI 3.1415926535
void printAngles(int a, int b, int c) {
   double x = (double)a;
   double y = (double)b;
   double z = (double)c;
   double A = (((double)(acos(( (y*y) + (z*z) - (x*x) ) / (2*y*z))))* 180 / PI);
   double B = ((double)(acos(( (x*x) + (z*z) - (y*y) ) / (2*x*z)))* 180 / PI);
   cout<<"Angles: A = "<<A<<", B = "<<B<<", C = 90";
}
void printOtherSides(int n) {
   int b,c;
   if (n & 1) {
      if (n == 1)
         cout << -1 << endl;
      else{
         b = (n*n-1)/2;
         c = (n*n+1)/2;
      }
   } else {
      if (n == 2)
         cout << -1 << endl;
      else {
         b = n*n/4-1;
         c = n*n/4+1;
      }
   }
   cout<<"Sides : a = "<<n<<", b = "<<b<<", c = "<<c<<endl;
   printAngles(n,b,c);
}
int main() {
   int a = 5;
   printOtherSides(a);
   return 0;
}

출력

Sides : a = 5, b = 12, c = 13
Angles: A = 22.6199, B = 67.3801, C = 90