Count distinct pairs from two arrays having same sum of digits

Given two arrays arr1[] and arr2[]. The task is to find the total number of distinct pairs(formed by picking 1 element from arr1 and one element from arr2), such that both the elements of the pair have the sum of digits.

Note: Pairs occurring more than once must be counted only once.

Examples:

Input : arr1[] = {33, 41, 59, 1, 3}
        arr2[] = {3, 32, 51, 3}
Output : 3
Possible pairs are:
(33, 51), (41, 32), (3, 3)

Input : arr1[] = {1, 6, 4, 22}
        arr2[] = {1, 3, 24}
Output : 2
Possible pairs are:
(1, 1), (6, 24)

Approach:

  • Run two nested loops to generate all possible pairs from the two arrays taking one element from arr1[] and one from arr2[].
  • If sum of digits is equal, then insert the pair(a, b) into a set, in order to avoid duplicates where a is the smaller element and b is the larger one.
  • Total pairs will be the size of the final set.

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to count total number of
// pairs having elements with same
// sum of digits
  
#include <bits/stdc++.h>
using namespace std;
  
// Function for returning
// sum of digits of a number
int digitSum(int n)
{
    int sum = 0;
    while (n > 0) {
        sum += n % 10;
        n = n / 10;
    }
    return sum;
}
  
// Function to return the total pairs
// of elements with equal sum of digits
int totalPairs(int arr1[], int arr2[], int n, int m)
{
  
    // set is used to avoid duplicate pairs
    set<pair<int, int> > s;
  
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
  
            // check sum of digits
            // of both the elements
            if (digitSum(arr1[i]) == digitSum(arr2[j])) {
  
                if (arr1[i] < arr2[j])
                    s.insert(make_pair(arr1[i], arr2[j]));
                else
                    s.insert(make_pair(arr2[j], arr1[i]));
            }
        }
    }
  
    // return size of the set
    return s.size();
}
  
// Driver code
int main()
{
    int arr1[] = { 100, 3, 7, 50 };
    int arr2[] = { 5, 1, 10, 4 };
    int n = sizeof(arr1) / sizeof(arr1[0]);
    int m = sizeof(arr2) / sizeof(arr2[0]);
  
    cout << totalPairs(arr1, arr2, n, m);
    return 0;
}

chevron_right


Output:

3


My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.