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

C++에서 a^2 + b^2 =c^2 및 1<=a<=b<=c<=n이 되도록 3중항(a, b, c)의 수를 센다.


정수 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