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