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

C++에서 주어진 둘레로 가능한 직각 삼각형의 수를 센다.

<시간/>

삼각형의 둘레 P가 주어집니다. 둘레는 삼각형의 모든 변의 합입니다. 목표는 둘레가 같을 때 만들 수 있는 직각 삼각형의 수를 찾는 것입니다.

삼각형의 변이 a,b,c인 경우. 그러면 a + b + c =P 및 a2 + b2 =c2 ( a, b 및 c 의 조합에 대한 피타고라스 정리 )

우리는 이것을 1에서 p/2로, b를 a+1에서 p/3으로 가져가서 확인할 것입니다. 그런 다음 c =p-a-b (a+b+c=p)

모든 직각삼각형에 대해 피타고라스 정리를 적용하십시오. , b 및 c의 값은 두 변의 합이 항상 3분의 1보다 큰 삼각형을 형성하는 조건도 만족해야 합니다.

예를 들어 이해합시다.

입력 − 둘레 P=12

출력 − 직각 삼각형의 총 개수 −1

설명 -

a+b+c=P 및 a 2 를 만족하는 유일한 값, b 및 c + b 2 =c 2 ( 또한 2> 3의 합)은 4, 3, 5입니다.

4+3+5=12, 3*3+4*4=5*5 ( 9+16=25 ) 또한 3+4>5, 4+5>3, 3+5>4

입력 − 둘레 P=10

출력 − 직각 삼각형의 총 개수 −0

설명 -

+b+c=P 및 a 2 를 충족할 수 있는, b 및 c 값 없음 + b 2 =c 2

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 주어진 둘레의 값을 저장하는 정수 변수 둘레를 사용합니다.

  • 함수 rightTriangles(int p)는 둘레를 입력으로 사용하고 가능한 직각 삼각형의 총 수를 반환합니다.

  • 변수 개수는 가능한 직각 삼각형의 수를 저장합니다(처음에는 0).

  • a=1 ~ p/2

    에 for 루프 시작 사용
  • 다시 b=a+1 ~ p/3에 대해 중첩 for 루프 시작 사용(두 변은 직각 삼각형에서 결코 같지 않음)

  • c=p-a-b를 계산합니다. 이를 위해 a,b,c가 (a+b>c &&b+c>a &&a+c>b)인지 확인합니다.

  • 또한 a*a+b*b==c*c인 피타고라스 정리를 확인하십시오. true인 경우 카운트가 증가합니다.

  • 마지막 반환 카운트에는 주어진 둘레에서 가능한 직각 삼각형의 수가 포함됩니다.

  • 원하는 결과로 카운트를 반환합니다.

참고 − 고유한 결과를 얻으려면 a,b 및 c의 조합에 대해서만 피타고라스 정리를 확인합니다.

#include <bits/stdc++.h>
using namespace std;
int rightTriangles(int p){
   int count = 0;
   int c=0;
   for( int a=1;a<p/2;a++){
      for(int b=1;b<p/3;b++){
         c=p-a-b;
         if( a+b>c && b+c>a && a+c>b) //condition for triangle{
            if( (a*a+b*b)==c*c ) //pythagoras rule for right triangles
               { ++count; }
         }
      }
   }
   return count;
}
int main(){
   int perimeter= 12;
   cout << "Total number of right triangles that can be formed: "<<rightTriangles(perimeter);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Total number of right triangles that can be formed: 1