정수 n이 주어집니다. 목표는 조건을 충족하는 세 개의 숫자(3개의 숫자 집합)를 찾는 것입니다. -
-
a 2 +b 2 =c 2
-
1<=a<=b<=c<=n
1<=a<=n 및 1<=b<=n 값에 대해 두 개의 루프를 실행하여 이를 수행합니다. 그에 따라 c를 계산하고(c=sqrt(a2+b2)) 조건 1과 2가 모두 충족되면 카운트를 증가시킵니다.
예를 들어 이해합시다.
입력 - N=5
출력 − 세 쌍의 수 − 1
설명 -
for a=3, b=4 and c=5 both conditions are met.
입력 - N=3
출력 − 세 쌍의 수 − 0
설명 -
조건 1과 2를 충족하는 세쌍둥이가 없습니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
정수 N은 [1,N] 범위의 마지막 한계를 저장합니다.
-
함수 countTriplets(int n)은 n을 취하고 조건 a 2 를 충족하는 삼중항의 개수를 반환합니다. +b 2 =c 2 및 1<=a<=b<=c<=n
-
변수 개수는 이러한 세 쌍의 수를 저장하며 처음에는 0입니다.
-
가변 합은 a와 b의 제곱의 합을 저장합니다.
-
a=1에서 n으로, b=a에서 n으로 시작하여 sum=a*a+b*b와 c를 합(sqrt(sum))의 제곱근으로 계산합니다.
-
계산된 c에 c*c==sum 및 b<=c &&c<=n(조건 1과 2가 모두 충족됨)과 같은 값이 있는 경우
-
증분 카운트는 현재, b, c가 두 조건을 모두 충족합니다.
-
a=n 및 b=n이 될 때까지 이 작업을 수행합니다. 결국 count는 조건을 충족하는 많은 트리플렛을 갖게 됩니다.
-
원하는 결과로 카운트를 반환합니다.
예시
#include <bits/stdc++.h> using namespace std; int countTriplets(int n){ int count = 0; int a,b,c; a=b=c=1; int sum=0; for (a = 1; a <= n; a++) //1<=a<=n{ for (b = a; b <= n; b++) //1<=a<=b<=n{ sum = a*a + b*b; //a^2 + b^2 =c^2 c = sqrt(sum); if (c * c == sum && b<=c && c<=n) //check 1<=a<=b<=c<=n{ count++; cout<<endl<<"a :"<<a<<" b :"<<b<<" c :"<<c; //to print triplets } } } return count; } int main(){ int N = 15; cout <<endl<< "Number of triplets : "<<countTriplets(N); return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Number of triplets : a :3 b :4 c :5 a :5 b :12 c :13 a :6 b :8 c :10 a :9 b :12 c :154 Number of triplets : 4