给定四个包含整数元素和整数和的数组,任务是对四元组进行计数,以便从不同的数组中选择每个元素,并且所有四个元素的和等于给定的和。
例子:
Input: P[] = {0, 2}, Q[] = {-1, -2}, R[] = {2, 1}, S[] = {2, -1}, sum = 0
Output: 2
(0, -1, 2, -1) and (2, -2, 1, -1) are the required quadruplets.
Input: P[] = {1, -1, 2, 3, 4}, Q[] = {3, 2, 4}, R[] = {-2, -1, 2, 1}, S[] = {4, -1}, sum = 3
Output: 10
方法:生成所有可能的四元组并计算每个四元组的总和。计算所有这些四元组的总和等于给定的总和。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the count of the required quadruplets
int countQuadruplets(int arr1[], int n1, int arr2[], int n2,
int arr3[], int n3, int arr4[], int n4, int sum)
{
// To store the count of required quadruplets
int cnt = 0;
// For arr1[]
for (int i = 0; i < n1; i++) {
// For arr2[]
for (int j = 0; j < n2; j++) {
// For arr3[]
for (int k = 0; k < n3; k++) {
// For arr4[]
for (int l = 0; l < n4; l++) {
// If current quadruplet has the required sum
if (arr1[i] + arr2[j] + arr3[k] + arr4[l] == sum) {
cnt++;
}
}
}
}
}
return cnt;
}
// Driver code
int main()
{
int arr1[] = { 0, 2 };
int arr2[] = { -1, -2 };
int arr3[] = { 2, 1 };
int arr4[] = { 2, -1 };
int sum = 0;
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int n2 = sizeof(arr2) / sizeof(arr2[0]);
int n3 = sizeof(arr3) / sizeof(arr3[0]);
int n4 = sizeof(arr4) / sizeof(arr4[0]);
cout << countQuadruplets(arr1, n1, arr2, n2, arr3, n3, arr4, n4, sum);
return 0;
}
Java
// Java program to implement
// the above approach
class GFG
{
// Function to return the count of the required quadruplets
static int countQuadruplets(int arr1[], int n1, int arr2[], int n2,
int arr3[], int n3, int arr4[], int n4, int sum)
{
// To store the count of required quadruplets
int cnt = 0;
// For arr1[]
for (int i = 0; i < n1; i++)
{
// For arr2[]
for (int j = 0; j < n2; j++)
{
// For arr3[]
for (int k = 0; k < n3; k++)
{
// For arr4[]
for (int l = 0; l < n4; l++)
{
// If current quadruplet has the required sum
if (arr1[i] + arr2[j] + arr3[k] + arr4[l] == sum)
{
cnt++;
}
}
}
}
}
return cnt;
}
// Driver code
public static void main(String[] args)
{
int arr1[] = { 0, 2 };
int arr2[] = { -1, -2 };
int arr3[] = { 2, 1 };
int arr4[] = { 2, -1 };
int sum = 0;
int n1 = arr1.length;
int n2 = arr2.length;
int n3 = arr3.length;
int n4 = arr4.length;
System.out.println(countQuadruplets(arr1, n1, arr2, n2,
arr3, n3, arr4, n4, sum));
}
}
// This code contributed by Rajput-Ji
Python3
# Python implementation of the approach
# Function to return the count of the required quadruplets
def countQuadruplets(P, Q, R, S, sum):
# To store the count of required quadruplets
cnt = 0
# Using four loops generate all possible quadruplets
for elem1 in P:
for elem2 in Q:
for elem3 in R:
for elem4 in S:
if elem1 + elem2 + elem3 + elem4 == sum:
cnt = cnt + 1
return cnt
# Driver code
P = [ 0, 2]
Q = [-1, -2]
R = [2, 1]
S = [ 2, -1]
sum = 0
print(countQuadruplets(P, Q, R, S, sum))
C#
// C# program to implement
// the above approach
using System;
class GFG
{
// Function to return the count of the required quadruplets
static int countQuadruplets(int []arr1, int n1, int []arr2, int n2,
int []arr3, int n3, int []arr4, int n4, int sum)
{
// To store the count of required quadruplets
int cnt = 0;
// For arr1[]
for (int i = 0; i < n1; i++)
{
// For arr2[]
for (int j = 0; j < n2; j++)
{
// For arr3[]
for (int k = 0; k < n3; k++)
{
// For arr4[]
for (int l = 0; l < n4; l++)
{
// If current quadruplet has the required sum
if (arr1[i] + arr2[j] + arr3[k] + arr4[l] == sum)
{
cnt++;
}
}
}
}
}
return cnt;
}
// Driver code
static public void Main ()
{
int []arr1 = { 0, 2 };
int []arr2 = { -1, -2 };
int []arr3 = { 2, 1 };
int []arr4 = { 2, -1 };
int sum = 0;
int n1 = arr1.Length;
int n2 = arr2.Length;
int n3 = arr3.Length;
int n4 = arr4.Length;
Console.WriteLine(countQuadruplets(arr1, n1, arr2, n2,
arr3, n3, arr4, n4, sum));
}
}
// This code contributed by akt_mit
PHP
输出:
2
时间复杂度: O(n 4 )
空间复杂度: O(1)