Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số bộ ba (a, b, c) sao cho a ^ 2 + b ^ 2 =c ^ 2 và 1 <=a <=b <=c <=n trong C ++


Chúng ta được cung cấp một số nguyên n. Mục đích là tìm các bộ ba (bộ 3 số) thỏa mãn các điều kiện -

  • a 2 + b 2 =c 2

  • 1 <=a <=b <=c <=n

Chúng ta sẽ thực hiện điều này bằng cách chạy hai vòng lặp cho các giá trị 1 <=a <=n và 1 <=b <=n. Tính c tương ứng (c =sqrt (a2 + b2)) và số gia tăng nếu cả hai điều kiện 1 và 2 đều được đáp ứng.

Hãy cùng hiểu với các ví dụ.

Đầu vào - N =5

Đầu ra - Số sinh ba - 1

Giải thích -

for a=3, b=4 and c=5 both conditions are met.

Đầu vào - N =3

Đầu ra - Số sinh ba - 0

Giải thích -

Không có cặp sinh ba nào đáp ứng điều kiện 1 và 2.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Số nguyên N lưu trữ giới hạn cuối cùng của phạm vi [1, N].

  • Hàm countTriplets (int n) nhận n và trả về số lượng các bộ ba thỏa mãn các điều kiện a 2 + b 2 =c 2 và 1 <=a <=b <=c <=n

  • Biến đếm lưu trữ số lượng các bộ ba như vậy, ban đầu là 0.

  • Tổng biến lưu trữ tổng bình phương của a và b.

  • Bắt đầu từ a =1 đến n và b =a đến n, tính sum =a * a + b * b và c dưới dạng căn bậc hai của sum (sqrt (sum)).

  • Nếu tính được c có giá trị sao cho c * c ==sum và b <=c &&c <=n (thỏa mãn cả điều kiện 1 và 2).

  • Số lượng tăng lên như a, b, c hiện tại thỏa mãn cả hai điều kiện.

  • Thực hiện điều này cho đến khi a =n và b =n. Cuối cùng, đếm sẽ có một số bộ ba như vậy thỏa mãn các điều kiện.

  • Trả lại số lượng như kết quả mong muốn.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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