在 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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP