从四个排序数组中计算四倍,这些数组的总和等于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的所有数组作为输入并返回count。

  • 对每个数组使用四个循环遍历。

  • a []的最外层循环0 <= i <n,b []的最内层循环0 <= j <n,c []的其他0 <= k <n,最内层的0 <= l

  • 比较a [i] + b [j] + c [k] + d [l] == x。如果为真,则递增计数。

  • 在所有循环的末尾,计数将是具有和x的四倍。

  • 返回计数作为结果。

示例

#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
猜你喜欢