从四个排序数组中计算四倍,这些数组的总和等于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(inta[],intb[],intc[],d[],intx,intn)将具有相同长度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