Pairwise sum of n (where n >= 3) numbers are given in a specified order, find the numbers. The order has pair sum of first and second, then first and third, first and fourth, … second and third, second and fourth, .. and so on. Consider an example: n = 4, let the numbers be {a, b, c, d}, their pairwise sum is given in the order arr[] = {a+b, a+c, a+d, b+c, b+d, c+d}.
Examples:
Input : arr[] = {11, 18, 13, 13, 8, 5} Output : {8, 3, 10, 5} 8+3 = 11, 8+10 = 18, 8+5 = 13, 3+10 = 13, 3+5 = 8, ... Input : arr[] = {13, 10, 14, 9, 17, 21, 16, 18, 13, 17} Output : {3, 10, 7, 11, 6}
Asked in Amazon
Approach is purely based on mathematics which is illustrated below:
n = 3, {a+b, a+c, b+c} We can find b-a = arr[2] - arr[1] = (b+c) - (a+c) We can find b = (arr[0] + (b-a))/2 = (a + b + (b - a))/2 = b We can find a = arr[0] - b = a n = 4, {a+b, a+c, a+d, b+c, b+d, c+d} We can find b-a = arr[3] - arr[1] = (b+c) - (a+c) We can find b = (arr[0] + (b-a)) / 2 = ((a+b) + (b-a)) / 2 a = arr[0] - b = (a+b) - b c = arr[1] - a = (a+c) - a d = arr[2] - a = (a+d) - a Observation : b_minus_a = b - a = arr[n-1] - arr[1] b = (arr[0] + b_minus_a)/2 a = (arr[0] - b) c = arr[1] - a d = arr[2] - a .......... n = 5, {a+b, a+c, a+d, a+e, b+c, b+d, b+e, c+d, c+e, d+e} Then calculate b-a = arr[n-1] - arr[1] = (b+c) - (a+c) Then b = (arr[0] + (b-a)) / 2 = ((a+b) + (b-a)) / 2 a = arr[0] - b = (a+b) - b Then for i=1 to n-2, remaining numbers are calculated as arr[i] - a, like c = arr[1] - a = (a+c) - a d = arr[2] - a = (a+c) - a and so on, . . . . last number = arr[n-2] - a
Below is the implementation of above idea.
C++
// C++ program to find n numbers from given ordered // pairwise sum of them. #include <bits/stdc++.h> using namespace std;
// Note : n is not size of array, but number of // elements whose pairwise sum is stored // in arr[] void findNumbers( int arr[], int n)
{ int num[n];
// b-a is calculated here
int b_minus_a = arr[n-1] - arr[1];
// b is calculated here
num[1] = (arr[0] + b_minus_a) / 2;
// a is calculated here
num[0] = arr[0] - num[1];
// to calculate all the other numbers
for ( int i=1; i<=(n-2); i++)
num[i+1] = arr[i] - num[0];
// display the numbers
cout << "Numbers are: " ;
for ( int i=0; i<n; i++)
cout << num[i] << " " ;
} //Driver program int main()
{ int arr[] = {13, 10, 14, 9, 17, 21, 16, 18, 13, 17};
int n = 5; // n is not size of array, but number of
// elements whose pairwise sum is stored
// in arr[]
findNumbers(arr, n);
return 0;
} |
Java
// Java program to find n numbers from given // ordered pairwise sum of them. class GFG {
// Note : n is not size of array, but number
// of elements whose pairwise sum is stored
// in arr[]
static void findNumbers( int arr[], int n)
{
int num[] = new int [n];
// b-a is calculated here
int b_minus_a = arr[n- 1 ] - arr[ 1 ];
// b is calculated here
num[ 1 ] = (arr[ 0 ] + b_minus_a) / 2 ;
// a is calculated here
num[ 0 ] = arr[ 0 ] - num[ 1 ];
// to calculate all the other numbers
for ( int i = 1 ; i <= (n - 2 ); i++)
num[i+ 1 ] = arr[i] - num[ 0 ];
// display the numbers
System.out.print( "Numbers are: " );
for ( int i = 0 ; i < n; i++)
System.out.print(num[i] + " " );
}
// Driver method
public static void main(String[] args)
{
int arr[] = { 13 , 10 , 14 , 9 , 17 , 21 ,
16 , 18 , 13 , 17 };
// n is not size of array, but number of
// elements whose pairwise sum is stored
// in arr[]
int n = 5 ;
findNumbers(arr, n);
}
} // This code is contributed by Anant Agarwal. |
Python3
# Python3 program to find n numbers # from given ordered pairwise sum of them. # Note : n is not size of array, # but number of elements whose # pairwise sum is stored in arr[] def findNumbers(arr, n):
num = [ 0 for i in range (n)]
# b-a is calculated here
b_minus_a = arr[n - 1 ] - arr[ 1 ]
# b is calculated here
num[ 1 ] = (arr[ 0 ] + b_minus_a) / / 2
# a is calculated here
num[ 0 ] = arr[ 0 ] - num[ 1 ]
# to calculate all the other numbers
for i in range ( 1 , (n - 2 ) + 1 ):
num[i + 1 ] = arr[i] - num[ 0 ]
# display the numbers
print ( "Numbers are: " , end = "")
for i in range (n):
print (num[i], end = ", " )
# Driver Code arr = [ 13 , 10 , 14 , 9 , 17 , 21 , 16 , 18 , 13 , 17 ]
n = 5 # n is not size of array, but number
# of elements whose pairwise sum is
# stored in arr[]
findNumbers(arr, n) # This code is contributed by Anant Agarwal. |
C#
// C# program to find n numbers from // given ordered pairwise sum of them. using System;
class GFG {
// Note : n is not size of array, but
// number of elements whose pairwise
// sum is stored in arr[]
static void findNumbers( int []arr, int n)
{
int []num = new int [n];
// b-a is calculated here
int b_minus_a = arr[n - 1] - arr[1];
// b is calculated here
num[1] = (arr[0] + b_minus_a) / 2;
// a is calculated here
num[0] = arr[0] - num[1];
// to calculate all the other numbers
for ( int i = 1; i <= (n - 2); i++)
num[i + 1] = arr[i] - num[0];
// display the numbers
Console.Write( "Numbers are: " );
for ( int i = 0; i < n; i++)
Console.Write(num[i] + " " );
}
// Driver code
public static void Main(String[] args)
{
int []arr = {13, 10, 14, 9, 17,
21, 16, 18, 13, 17};
// n is not size of array, but number of
// elements whose pairwise sum is stored
// in arr[]
int n = 5;
findNumbers(arr, n);
}
} // This code is contributed by parashar... |
PHP
<?php // PHP program to find n numbers // from given ordered pairwise // sum of them. // Note : n is not size // of array, but number of // elements whose pairwise // sum is stored in arr[] function findNumbers( $arr , $n )
{ $num [ $n ]=0;
// b-a is calculated here
$b_minus_a = $arr [ $n - 1] - $arr [1];
// b is calculated here
$num [1] = ( $arr [0] + $b_minus_a ) / 2;
// a is calculated here
$num [0] = $arr [0] - $num [1];
// to calculate all the other numbers
for ( $i = 1; $i <= ( $n - 2); $i ++)
$num [ $i + 1] = $arr [ $i ] - $num [0];
// display the numbers
echo "Numbers are: " ;
for ( $i = 0; $i < $n ; $i ++)
echo $num [ $i ]. ", " ;
} // Driver Code { $arr = array (13, 10, 14, 9, 17,
21, 16, 18, 13, 17);
// n is not size of array, but number of
// elements whose pairwise sum is stored
// in arr[]
$n = 5;
findNumbers( $arr , $n );
return 0;
} // This code is contributed by nitin mittal. ?> |
Javascript
<script> // javascript program to find n numbers from given // ordered pairwise sum of them. // Note : n is not size of array, but number // of elements whose pairwise sum is stored
// in arr
function findNumbers(arr , n) {
var num = Array(n).fill(0);
// b-a is calculated here
var b_minus_a = arr[n - 1] - arr[1];
// b is calculated here
num[1] = parseInt((arr[0] + b_minus_a) / 2);
// a is calculated here
num[0] = arr[0] - num[1];
// to calculate all the other numbers
for (i = 1; i <= (n - 2); i++)
num[i + 1] = arr[i] - num[0];
// display the numbers
document.write( "Numbers are: " );
for (i = 0; i < n; i++)
document.write(num[i] + " " );
}
// Driver method
var arr = [ 13, 10, 14, 9, 17, 21, 16, 18, 13, 17 ];
// n is not size of array, but number of
// elements whose pairwise sum is stored
// in arr
var n = 5;
findNumbers(arr, n);
// This code contributed by umadevi9616 </script> |
Output
Numbers are: 3 10 7 11 6
Time Complexity: O(n)
Recommended Articles