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

06 Dec, 2021
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}
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++
Java
Python 3
C#
PHP
Javascript
// C++ implementation to find original array// from the encrypted array#include <bits/stdc++.h>using namespace std; // Finds and prints the elements of the original// arrayvoid 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++)        cout << (arr_sum - arr[i]) << " ";} // Driver program to test aboveint main(){    int arr[] = {10, 14, 12, 13, 11};    int n = sizeof(arr) / sizeof(arr[0]);    findAndPrintOriginalArray(arr, n);    return 0;}
import java.util.*; 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 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 rj13to.
# Python 3 implementation to find# original array from the encrypted# array # Finds and prints the elements of# the original arraydef 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 abovearr = [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 arrayusing 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...
<?php// PHP implementation to find// original array from the// encrypted array // Finds and prints the elements// of the original arrayfunction findAndPrintOriginalArray($arr, $n){    // total sum of elements    // of encrypted array    $arr_sum = 0;    for ( $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 ( $i = 0; $i < $n; $i++)        echo $arr_sum - $arr[$i] , " ";} // Driver Code$arr = array(10, 14, 12, 13, 11);$n = count($arr);findAndPrintOriginalArray($arr, $n); // This code is contributed by anuj_67.?>
<script>    // Javascript program to find original    // array from the encrypted array         // Finds and prints the elements    // of the original array    function findAndPrintOriginalArray(arr, n)    {                  // total sum of elements        // of encrypted array        let arr_sum = 0;        for (let i = 0; i < n; i++)            arr_sum += arr[i];          // total sum of elements        // of original array        arr_sum = parseInt(arr_sum / (n - 1), 10);          // calculating and displaying        // elements of original array        for (let i = 0; i < n; i++)            document.write(arr_sum - arr[i] + " ");    }         let arr = [10, 14, 12, 13, 11];    let n =arr.length;    findAndPrintOriginalArray(arr, n);         // This code is contributed by rameshtravel07.</script>
Output : 
5 1 3 2 4
Time complexity: O(N)
Auxiliary Space: O(1)This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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.
parashar
Smitha Dinesh Semwal
vt_m
souravmahato348
rameshtravel07
rj13to
Arrays
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Introduction to Arrays
Multidimensional Arrays in Java
Linear Search
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Linked List vs Array
Python | Using 2D arrays/lists the right way
Maximum and minimum of an array using minimum number of comparisons
Given an array of size n and a number k, find all elements that appear more than n/k times