用 C++ 統計滿足 a^2 + b^2 = c^2 且 1<=a<=b<=c<= n 的三元組 (a, b, c) 的數量
給定一個整數 n,目標是找到滿足以下條件的三元組(3 個數字的集合):−
a2+b2=c2
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 並返回滿足條件 a2+b2=c2 且 1<=a<=b<=c<=n 的三元組的數量。
變數 count 儲存此類三元組的數量,初始值為 0。
變數 sum 儲存 a 和 b 的平方和。
從 a=1 到 n,b=a 到 n,計算 sum=a*a+b*b 和 c 為 sum 的平方根 (sqrt(sum))。
如果計算出的 c 的值滿足 c*c==sum 且 b<=c && c<=n(滿足條件 1 和 2)。
將 count 遞增,因為當前的 a、b、c 滿足這兩個條件。
執行此操作直到 a=n 和 b=n。最後,count 將包含滿足條件的三元組的數量。
返回 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
JavaScript
PHP