C++ 中統計滿足條件的三元組


給定一個長度為 n 的整數陣列 Arr[]。目標是找到滿足條件的三元組 (Arr[i],Arr[j],Arr[k]) 的數量,其中任意兩個數字之和等於第三個數字。

a+b=c,其中 a、b、c 是 Arr[] 中的元素,其索引分別為 i、j、k,且滿足 0<=i<j<k<n。我們將使用三個 for 迴圈來實現這一點。如果 arr[x]+arr[y]=arr[z] 且 x!=y!=z,則遞增計數器。讓我們透過示例來理解。

輸入

arr[]= { 1,2,2,3,4 }, N=5

輸出

Number of triplets: 4

解釋

滿足 arr[x]+arr[y]=arr[z] 的三元組。

Arr{}=[ 1,2,2,3,4 ] =(1,2,3) → 1+2=3
Arr{}=[ 1,2,2,3,4 ] =(1,2,3) → 1+2=3
Arr{}=[ 1,2,2,3,4 ] =(1,3,4) → 1+3=4
Arr{}=[ 1,2,2,3,4 ] =(2,2,4) → 2+2=4

三元組總數:4

輸入

arr[]= {2,2,2,2,2}, N=5

輸出

Number of triplets: 0

解釋

每兩個數字的和都等於 4,不等於第三個數字 2。

三元組總數:0

下面程式中使用的方案如下

  • 我們使用一個整數陣列 Arr[],並用隨機數進行初始化。

  • 變數 N 儲存 Arr[] 的長度。

  • 函式 countTriplets(int arr[],int n) 接收一個數組及其長度,並返回其中一個數字可以寫成另外兩個數字之和的三元組數量。

  • 將初始變數 count 設定為 0,用於儲存三元組的數量。

  • 使用三個 for 迴圈遍歷陣列,分別對應三元組的每個元素。

  • 最外層迴圈從 0<=i<n-2 開始,內層迴圈 i<j<n-1,最內層迴圈 j<k<n。

  • 檢查是否滿足 arr[i]+arr[j]==arr[k] 或 arr[i]+arr[k]==arr[j] 或 arr[k]+arr[j]==arr[i]。如果滿足條件,則遞增計數器。

  • 在所有迴圈結束後,count 將包含滿足條件的三元組的總數。

  • 返回 count 作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int countTriplets(int arr[], int n){
   int count = 0;
   for (int i = 0; i < n-2; i++){
      for (int j = i+1; j < n-1; j++){
         for (int k = j+1; k < n; k++){
            if(arr[i]+arr[j]==arr[k] || arr[j]+arr[k]==arr[i] || arr[k]+arr[i]==arr[j]){                   count++;
             }
         }
      }
   }
   return count;
}
int main(){
   int Arr[]={ 1,2,2,3,4 };
   int N=5; //length of array
   cout <<endl<< "Number of triplets : "<<countTriplets(Arr,N);
   return 0;
}

輸出

Number of triplets : 4

更新於: 2020-09-16

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.