Open In App

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

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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++




// 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
// array
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++)
        cout << (arr_sum - arr[i]) << " ";
}
 
// Driver program to test above
int main()
{
    int arr[] = {10, 14, 12, 13, 11};
    int n = sizeof(arr) / sizeof(arr[0]);
    findAndPrintOriginalArray(arr, n);
    return 0;
}


Java




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




# 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#




// 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...


PHP




<?php
// PHP implementation 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
    $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.
?>


Javascript




<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)



Last Updated : 11 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads