Print all pairs in an unsorted array with equal sum

Given an unsorted array A[]. The task is to print all unique pairs in the unsorted array with equal sum.

Note: Print the result in the format as shown in the below examples.

Examples:

Input: A[]= { 6, 4, 12, 10, 22, 54, 32, 42, 21, 11}
Output:
Pairs : ( 4, 12) ( 6, 10)  have sum : 16
Pairs : ( 10, 22) ( 21, 11)  have sum : 32
Pairs : ( 12, 21) ( 22, 11)  have sum : 33
Pairs : ( 22, 21) ( 32, 11)  have sum : 43
Pairs : ( 32, 21) ( 42, 11)  have sum : 53
Pairs : ( 12, 42) ( 22, 32)  have sum : 54
Pairs : ( 10, 54) ( 22, 42)  have sum : 64

Input:A[]= { 4, 23, 65, 67, 24, 12, 86}
Output:
Pairs : ( 4, 86) ( 23, 67) have sum : 90


The idea is to use map in C++ STL for avoiding duplicate pair of elements.

  • Create a map with key as pair of integer and value as integer to store all unique pair of elements and their corresponding sum.
  • Traverse the array and generate all possible pairs and store the pairs and their corresponding sum in first map.
  • Create a second map with key as integer and value as a vector of pair to store list of all pair of elements with a corresponding sum.
  • Finally, traverse the second map, and for a sum with more than one pair, print all pairs and then the corresponding sum in a format as shown in the above example.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to print all pairs
// with equal sum
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to print all pairs
// with equal sum
void pairWithEqualSum(int A[], int n)
{
    // Map1 to store pairs and their sum,
    // An ordered map is used here to avoid
    // duplicate pairs of elements
    map<pair<int, int>, int> mp;
  
    // Insert all unique pairs and their
    // corresponding sum in the map
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            pair<int, int> p = make_pair(A[i], A[j]);
  
            mp[p] = A[i] + A[j];
        }
    }
  
    // Second map with key as sum and value as
    // list of pairs with that sum
    map<int, vector<pair<int, int> > > mp2;
  
    // Start iterating first map mp and insert all
    // pairs with corresponding sum in second map mp2
    for (auto itr = mp.begin(); itr != mp.end(); itr++) {
        int sum = itr->second;
        pair<int, int> pair = itr->first;
  
        mp2[sum].push_back(pair);
    }
  
    // Traverse the second map mp2, and for sum
    // with more than one pair, print all pairs
    // and the corresponding sum
    for (auto itr = mp2.begin(); itr != mp2.end(); itr++) {
        if (itr->second.size() > 1) {
            cout << "Pairs : ";
  
            for (int i = 0; i < itr->second.size(); i++) {
                cout << "( " << itr->second[i].first << ", "
                     << itr->second[i].second << ") ";
            }
  
            cout << " have sum : " << itr->first << endl;
        }
    }
}
  
// Driver Code
int main()
{
    int A[] = { 6, 4, 12, 10, 22, 54, 32, 42, 21, 11, 8, 2 };
  
    int n = sizeof(A) / sizeof(A[0]);
  
    pairWithEqualSum(A, n);
  
    return 0;
}

chevron_right


Python3

# Python3 program to print all pairs
# with equal sum

# Function to print all pairs with equal sum
def pairWithEqualSum(A, n):

# Map1 to store pairs and their sum,
# An ordered map is used here to
# avoid duplicate pairs of elements
mp = {}

# Insert all unique pairs and their
# corresponding sum in the map
for i in range(0, n – 1):
for j in range(i + 1, n):

mp[(A[i], A[j])] = A[i] + A[j]

# Second map with key as sum and value
# as list of pairs with that sum
mp2 = {}

# Start iterating first map mp and insert all
# pairs with corresponding sum in second map mp2
for itr in mp:
Sum = mp[itr]
if Sum not in mp2:
mp2[Sum] = []
mp2[Sum].append(itr)

# Traverse the second map mp2, and for
# sum with more than one pair, print
# all pairs and the corresponding sum
for itr in mp2:
if len(mp2[itr]) > 1:
print(“Pairs : “, end = “”)

for i in range(0, len(mp2[itr])):
print(“(“, mp2[itr][i][0], “,”,
mp2[itr][i][1], “)”, end = ” “)

print(“have sum :”, itr)

# Driver Code
if __name__ == “__main__”:

A = [6, 4, 12, 10, 22, 54,
32, 42, 21, 11, 8, 2]
n = len(A)

pairWithEqualSum(A, n)

# This code is contributed by Rituraj Jain

Output:

Pairs : ( 6, 4) ( 8, 2)  have sum : 10
Pairs : ( 4, 8) ( 10, 2)  have sum : 12
Pairs : ( 4, 10) ( 6, 8) ( 12, 2)  have sum : 14
Pairs : ( 4, 12) ( 6, 10)  have sum : 16
Pairs : ( 6, 12) ( 10, 8)  have sum : 18
Pairs : ( 12, 11) ( 21, 2)  have sum : 23
Pairs : ( 10, 22) ( 21, 11)  have sum : 32
Pairs : ( 12, 21) ( 22, 11)  have sum : 33
Pairs : ( 12, 22) ( 32, 2)  have sum : 34
Pairs : ( 22, 21) ( 32, 11)  have sum : 43
Pairs : ( 12, 32) ( 42, 2)  have sum : 44
Pairs : ( 32, 21) ( 42, 11)  have sum : 53
Pairs : ( 12, 42) ( 22, 32)  have sum : 54
Pairs : ( 10, 54) ( 22, 42)  have sum : 64


My Personal Notes arrow_drop_up

Strategy Path planning and Destination matters in success No need to worry about in between temporary failures

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : rituraj_jain