삼각형의 둘레 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