用 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

更新於:2020-08-29

450 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.