 Open in App
Not now

# Append two elements to make the array satisfy the given condition

• Last Updated : 25 Jan, 2022

Given an array arr[] of non-negative integers, let’s define X as the XOR of all the array elements and S as the sum of all the array elements. The task is to find two elements such that when they are appended to the array S = 2 * X is satisfied for the updated array.

Examples:

Input: arr[] = {1, 7}
Output: 6 14
Initially S = 8, and X = 6. After appending 6
and 14, S_NEW = (8 + 6 + 14) = 28
and X_NEW = (6 ^ 6 ^ 14) = 14
Clearly, S_NEW = 2 * X_NEW
Input: arr[] = {1, 3}
Output: 2 6

Naive approach: Run two nested loops from 1 to S and check for each pair whether it satisfies the condition or not. This will take O(S2) time.
Efficient approach: It can be observed that if X and S + X are appended to the array then S_NEW = 2 * (S + X) and X_NEW = S + X which satisfy the given condition.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to find the required numbers``void` `findNums(``int` `arr[], ``int` `n)``{` `    ``// Find the sum and xor``    ``int` `S = 0, X = 0;``    ``for` `(``int` `i = 0; i < n; i++) {``        ``S += arr[i];``        ``X ^= arr[i];``    ``}` `    ``// Print the required elements``    ``cout << X << ``" "` `<< (X + S);``}` `// Driver code``int` `main()``{``    ``int` `arr[] = { 1, 7 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(``int``);` `    ``findNums(arr, n);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GFG``{``    ` `    ``// Function to find the required numbers``    ``static` `void` `findNums(``int` `arr[], ``int` `n)``    ``{``    ` `        ``// Find the sum and xor``        ``int` `S = ``0``, X = ``0``;``        ``for` `(``int` `i = ``0``; i < n; i++)``        ``{``            ``S += arr[i];``            ``X ^= arr[i];``        ``}``    ` `        ``// Print the required elements``        ``System.out.println(X + ``" "` `+ (X + S));``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``7` `};``        ``int` `n = arr.length;``    ` `        ``findNums(arr, n);``    ``}``}` `// This code is contributed by AnkitRai01`

## Python3

 `# Python3 implementation of the approach` `# Function to find the required numbers``def` `findNums(arr, n) :` `    ``# Find the sum and xor``    ``S ``=` `0``; X ``=` `0``;``    ``for` `i ``in` `range``(n) :``        ``S ``+``=` `arr[i];``        ``X ^``=` `arr[i];` `    ``# Print the required elements``    ``print``(X, X ``+` `S);` `# Driver code``if` `__name__ ``=``=` `"__main__"` `:` `    ``arr ``=` `[ ``1``, ``7` `];``    ``n ``=` `len``(arr);` `    ``findNums(arr, n);``    ` `# This code is contributed by AnkiRai01`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{``    ` `    ``// Function to find the required numbers``    ``static` `void` `findNums(``int` `[]arr, ``int` `n)``    ``{``    ` `        ``// Find the sum and xor``        ``int` `S = 0, X = 0;``        ``for` `(``int` `i = 0; i < n; i++)``        ``{``            ``S += arr[i];``            ``X ^= arr[i];``        ``}``    ` `        ``// Print the required elements``        ``Console.WriteLine(X + ``" "` `+ (X + S));``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]arr = { 1, 7 };``        ``int` `n = arr.Length;``    ` `        ``findNums(arr, n);``    ``}``}` `// This code is contributed by AnkitRai01`

## Javascript

 ``

Output:

`6 14`

Time Complexity: O(n)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up