# Count distinct pairs from two arrays having same sum of digits

• Difficulty Level : Easy
• Last Updated : 12 May, 2021

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:

## C++

 `// C++ program to count total number of``// pairs having elements with same``// sum of digits` `#include ``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 > 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;``}`

## Java

 `// Java program to count total number of``// pairs having elements with same``// sum of digits``import` `java.util.*;` `class` `GFG``{` `static` `class` `pair``{``    ``int` `first, second;``    ``public` `pair(``int` `first, ``int` `second)``    ``{``        ``this``.first = first;``        ``this``.second = second;``    ``}``}` `// Function for returning``// sum of digits of a number``static` `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``static` `int` `totalPairs(``int` `arr1[], ``int` `arr2[],``                      ``int` `n, ``int` `m)``{` `    ``// set is used to avoid duplicate pairs``    ``Set s = ``new` `HashSet<>();` `    ``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.add(``new` `pair(arr1[i], arr2[j]));``                ``else``                    ``s.add(``new` `pair(arr2[j], arr1[i]));``            ``}``        ``}``    ``}` `    ``// return size of the set``    ``return` `s.size();``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `arr1[] = { ``100``, ``3``, ``7``, ``50` `};``    ``int` `arr2[] = { ``5``, ``1``, ``10``, ``4` `};``    ``int` `n = arr1.length;``    ``int` `m = arr2.length;` `    ``System.out.println(totalPairs(arr1, arr2, n, m));``}``}` `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 program to count total number of``# pairs having elements with same sum of digits` `# Function for returning``# sum of digits of a number``def` `digitSum(n):`` ` `    ``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``def` `totalPairs(arr1, arr2, n, m):` `    ``# set is used to avoid duplicate pairs``    ``s ``=` `set``()` `    ``for` `i ``in` `range``(``0``, n): ``        ``for` `j ``in` `range``(``0``, m): ` `            ``# check sum of digits``            ``# of both the elements``            ``if` `digitSum(arr1[i]) ``=``=` `digitSum(arr2[j]): ` `                ``if` `arr1[i] < arr2[j]:``                    ``s.add((arr1[i], arr2[j]))``                ``else``:``                    ``s.add((arr2[j], arr1[i]))``             ` `    ``# return size of the set``    ``return` `len``(s)` `# Driver code``if` `__name__ ``=``=` `"__main__"``:`` ` `    ``arr1 ``=` `[``100``, ``3``, ``7``, ``50``] ``    ``arr2 ``=` `[``5``, ``1``, ``10``, ``4``]``    ``n ``=` `len``(arr1)``    ``m ``=` `len``(arr2)` `    ``print``(totalPairs(arr1, arr2, n, m))``    ` `# This code is contributed by Rituraj Jain`

## C#

 `// C# program to count total number of``// pairs having elements with same``// sum of digits``using` `System;``using` `System.Collections.Generic;` `class` `GFG``{` `public` `class` `pair``{``    ``public` `int` `first, second;``    ``public` `pair(``int` `first, ``int` `second)``    ``{``        ``this``.first = first;``        ``this``.second = second;``    ``}``}` `// Function for returning``// sum of digits of a number``static` `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``static` `int` `totalPairs(``int` `[]arr1, ``int` `[]arr2,``                      ``int` `n, ``int` `m)``{` `    ``// set is used to avoid duplicate pairs``    ``HashSet s = ``new` `HashSet();` `    ``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.Add(``new` `pair(arr1[i], arr2[j]));``                ``else``                    ``s.Add(``new` `pair(arr2[j], arr1[i]));``            ``}``        ``}``    ``}` `    ``// return size of the set``    ``return` `s.Count;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `[]arr1 = { 100, 3, 7, 50 };``    ``int` `[]arr2 = { 5, 1, 10, 4 };``    ``int` `n = arr1.Length;``    ``int` `m = arr2.Length;` `    ``Console.WriteLine(totalPairs(arr1, arr2, n, m));``}``}` `// This code is contributed by Princi Singh`

## Javascript

 ``

Output:

`3`

My Personal Notes arrow_drop_up