在 C++ 中統計來自四個已排序陣列的四元組,其和等於給定值 x


我們得到四個陣列 A[]、B[]、C[] 和 D[]。目標是找到這些陣列元素的所有四元組,使得 A[i]+B[j]+C[k]+D[l] =x。所有四個陣列都具有相同數量的元素 N。

我們將透過遍歷每個陣列一次並比較 A[i]+B[j]+C[j]+D[l]==x 來實現這一點。如果為真,則遞增計數。

讓我們透過示例來理解。

輸入 

A[]={ 1,2,3}; B[]={ 2,3,2}; C[]={ 4,3,1}; D[]={ 3,1,1 }; X=12

輸出 

Count of Quadruples: 4

解釋 

Quadruples such as ( A[i] B[j] C[k] D[l] ) are:
(2 3 4 3) , (3 2 4 3), (3 3 3 3), (3 2 4 3)
Number of quadruples : 4

輸入 

A[]={ 1,1,1}; B[]={ 2,2,2}; C[]={ 3,3,3}; D[]={ 4,4,4 }; X=15

輸出 

Count of Quadruples: 0

解釋 

No such elements could be paired.

下面程式中使用的思路如下

  • 我們使用隨機數初始化相同長度的整數陣列 A[]、B[]、C[] 和 D[]。

  • 使用變數 N 儲存它們的長度。

  • 函式 countQuad(int a[],int b[],int c[],d[],int x, int n) 將所有陣列及其相同長度 n 作為輸入,並返回計數。

  • 使用四個迴圈遍歷每個陣列。

  • 最外層迴圈 0<=i<n 用於 a[],內部 0<=j<n 用於 b[],其他 0<=k<n 用於 c[],最內層 0<=l

  • 比較 a[i]+b[j]+c[k]+d[l]==x。如果為真,則遞增計數。

  • 在所有迴圈結束時,count 將包含和為 x 的四元組。

  • 將 count 作為結果返回。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int countQuads(int a[],int b[],int c[],int d[],int x, int n){
   int count = 0;
   for (int i = 0; i < n; i++){
      for (int j = 0; j < n; j++){
         for (int k = 0; k < n; k++){
            for (int l = 0; l < n; l++){
               int sum=a[i]+b[j]+c[k]+d[l];
               if(sum==x){
                  count++;
                  cout<<endl<<a[i]<<" "<<b[j]<<" "<<c[k]<<" "<<d[l];}
               }
            }
         }
      }
   return count;
}
int main(){
   int A[]={ 1,1,1}; int B[]={ 2,2,2}; int C[]={ 3,3,3}; int D[]={ 4,4,4 };
   int X=15;
   int N=3; //length of each array
   cout <<endl<< "Number of quadruples : "<<countQuads(A,B,C,D,X,N);
   return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Number of quadruples : 0

更新於: 2020-10-31

138 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.