Open In App

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

Last Updated : 11 Jul, 2022
Comments
Improve
Suggest changes
Like Article
Like
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)


Next Article
Article Tags :
Practice Tags :

Similar Reads