# Find original array from encrypted array (An array of sums of other elements)

Find original array from a given encrypted array of size n. Encrypted array is obtained by replacing each element of the original array by the sum of the remaining array elements.

Examples :

```Input :  arr[] = {10, 14, 12, 13, 11}
Output : {5, 1, 3, 2, 4}
Original array {5, 1, 3, 2, 4}
Encrypted array is obtained as:
= {1+3+2+4, 5+3+2+4, 5+1+2+4, 5+1+3+4, 5+1+3+2}
= {10, 14, 12, 13, 11}
Each element of original array is replaced by the
sum of the remaining array elements.

Input : arr[] = {95, 107, 103, 88, 110, 87}
Output : {23, 11, 15, 30, 8, 31}
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach is purely based on arithmetic observations which are illustrated below:

```Let n = 4, and
the original array be ori[] = {a, b, c, d}
encrypted array is given as:
arr[] = {b+c+d, a+c+d, a+b+d, a+b+c}

Elements of encrypted array are :
arr[0] = (b+c+d), arr[1] = (a+c+d),
arr[2] = (a+b+d), arr[3] = (a+b+c)
add up all the elements
sum =  arr[0] + arr[1] + arr[2] + arr[3]
= (b+c+d) + (a+c+d) + (a+b+d) + (a+b+c)
= 3(a+b+c+d)
Sum of elements of ori[] = sum / n-1
= sum/3
= (a+b+c+d)
Thus, for a given encrypted array arr[] of size n, the sum of
the elements of the original array ori[] can be calculated as:
sum =  (arr[0]+arr[1]+....+arr[n-1]) / (n-1)

Then, elements of ori[] are calculated as:
ori[0] = sum - arr[0]
ori[1] = sum - arr[1]
.
.
ori[n-1] = sum - arr[n-1]
```

Below is the implementation of above steps.

 `// C++ implementation to find original array ` `// from the encrypted array ` `#include ` `using` `namespace` `std; ` ` `  `// Finds and prints the elements of the original ` `// array ` `void` `findAndPrintOriginalArray(``int` `arr[], ``int` `n) ` `{ ` `    ``// total sum of elements ` `    ``// of encrypted array ` `    ``int` `arr_sum = 0; ` `    ``for` `(``int` `i=0; i

 `// Java implementation to find original  ` `// array from the encrypted array ` ` `  `class` `GFG ` `{ ` `    ``// Finds and prints the elements  ` `    ``// of the original array ` `    ``static` `void` `findAndPrintOriginalArray(``int` `arr[],  ` `                                          ``int` `n) ` `    ``{ ` `        ``// total sum of elements ` `        ``// of encrypted array ` `        ``int` `arr_sum = ``0``; ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `            ``arr_sum += arr[i]; ` ` `  `        ``// total sum of elements ` `        ``// of original array ` `        ``arr_sum = arr_sum / (n - ``1``); ` ` `  `        ``// calculating and displaying ` `        ``// elements of original array ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `            ``System.out.print(arr_sum - arr[i] + ``" "``); ` `    ``} ` ` `  `    ``// Driver program to test above ` `    ``public` `static` `void` `main (String[] args) ` `    ``{ ` `        ``int` `arr[] = {``10``, ``14``, ``12``, ``13``, ``11``}; ` `        ``int` `n =arr.length; ` `        ``findAndPrintOriginalArray(arr, n); ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

 `# Python 3 implementation to find ` `# original array from the encrypted ` `# array ` ` `  `# Finds and prints the elements of ` `# the original array ` `def` `findAndPrintOriginalArray(arr, n): ` ` `  `    ``# total sum of elements ` `    ``# of encrypted array ` `    ``arr_sum ``=` `0` `    ``for` `i ``in` `range``(``0``, n): ` `        ``arr_sum ``+``=` `arr[i] ` ` `  `    ``# total sum of elements ` `    ``# of original array ` `    ``arr_sum ``=` `int``(arr_sum ``/` `(n ``-` `1``)) ` ` `  `    ``# calculating and displaying ` `    ``# elements of original array ` `    ``for` `i ``in` `range``(``0``, n): ` `        ``print``((arr_sum ``-` `arr[i]),  ` `                       ``end ``=` `" "``) ` ` `  `# Driver program to test above ` `arr ``=` `[``10``, ``14``, ``12``, ``13``, ``11``] ` `n ``=` `len``(arr) ` `findAndPrintOriginalArray(arr, n) ` ` `  `# This code is contributed By Smitha `

 `// C# program to find original  ` `// array from the encrypted array ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// Finds and prints the elements  ` `    ``// of the original array ` `    ``static` `void` `findAndPrintOriginalArray(``int` `[]arr,  ` `                                          ``int` `n) ` `    ``{ ` `         `  `        ``// total sum of elements ` `        ``// of encrypted array ` `        ``int` `arr_sum = 0; ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``arr_sum += arr[i]; ` ` `  `        ``// total sum of elements ` `        ``// of original array ` `        ``arr_sum = arr_sum / (n - 1); ` ` `  `        ``// calculating and displaying ` `        ``// elements of original array ` `        ``for` `(``int` `i = 0; i < n; i++) ` `        ``Console.Write(arr_sum - arr[i] + ``" "``); ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `Main (String[] args) ` `    ``{ ` `        ``int` `[]arr = {10, 14, 12, 13, 11}; ` `        ``int` `n =arr.Length; ` `        ``findAndPrintOriginalArray(arr, n); ` `    ``} ` `} ` ` `  `// This code is contributed by parashar... `

 ` `

Output :
```5 1 3 2 4
```

Time complexity: O(n)

This article is contributed by Ayush Jauhari. 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Article Tags :
Practice Tags :