Open In App

Find elements of array using XOR of consecutive elements

Given an array arr[] in which XOR of every 2 consecutive elements of the original array is given i.e if the total number of elements in the original array is then the size of this XOR array would be n-1. The first element in the original array is also given. The task is to find out the rest of n-1 elements of the original array.

Examples:  



Input : arr[] = {13, 2, 6, 1}, a = 5
Output : 5 8 10 12 13
5^8=13, 8^10=2, 10^12=6, 12^13=1

Input : arr[] = {12, 5, 26, 7}, a = 6
Output : 6 10 15 21 18 

Approach: We can find all the elements one by one with the help of (first elements), and to find the next element i.e we have to xor a by arr[0], similarly for xor arr[1] with b and so on.

This works by following the properties of XOR as stated below:  



So, as arr[0] contains a^b. Therefore,  

a ^ arr[0] = a ^ a ^ b
           = 0 ^ b
           = b


Similarly, arr[i] contains XOR of ai and ai+1. Therefore, 

ai ^ arr[i] = ai ^ ai ^ ai+1
            = 0 ^ ai+1
            = ai+1

Algorithm:

Step 1: Start
Step 2: Let’s start with creating a function named getElements with three parameters: an integer a, an array arr of size n, and an                  integer n.
Step 3: Now let’s form a new integer array of size n+1 in which we will store the value of the original array.
Step 4: Now set the value of the 0th index to a.
Step 5: Start a for loop which traverses through the given array from index 0 to n-1.
Step 6: Calculate the XOR of the current element of arr with the previous element of elements for each iteration, then store the                    result in the subsequent index of elements.
Step 7: Now print all elements with another for a loop.
Step 8: End 
 

Below is the implementation of the above approach

// C++ program to find the array elements
// using XOR of consecutive elements
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the array elements
// using XOR of consecutive elements
void getElements(int a, int arr[], int n)
{
    // array to store the original
    // elements
    int elements[n + 1];
 
    // first element a i.e elements[0]=a
    elements[0] = a;
 
    for (int i = 0; i < n; i++) {
 
        /*  To get the next elements we have to calculate
            xor of previous elements with given xor of 2
            consecutive elements.
            e.g. if a^b=k1 so to get b xor a both side.
            b = k1^a
        */
        elements[i + 1] = arr[i] ^ elements[i];
    }
 
    // Printing the original array elements
    for (int i = 0; i < n + 1; i++)
        cout << elements[i] << " ";
}
 
// Driver Code
int main()
{
    int arr[] = { 13, 2, 6, 1 };
 
    int n = sizeof(arr) / sizeof(arr[0]);
 
    int a = 5;
 
    getElements(a, arr, n);
 
    return 0;
}

                    
// Java  program to find the array elements
// using XOR of consecutive elements
 
import java.io.*;
 
class GFG {
    
 
// Function to find the array elements
// using XOR of consecutive elements
static void getElements(int a, int arr[], int n)
{
    // array to store the original
    // elements
    int elements[] = new int[n + 1];
 
    // first element a i.e elements[0]=a
    elements[0] = a;
 
    for (int i = 0; i < n; i++) {
 
        /* To get the next elements we have to calculate
            xor of previous elements with given xor of 2
            consecutive elements.
            e.g. if a^b=k1 so to get b xor a both side.
            b = k1^a
        */
        elements[i + 1] = arr[i] ^ elements[i];
    }
 
    // Printing the original array elements
    for (int i = 0; i < n + 1; i++)
        System.out.print( elements[i] + " ");
}
 
// Driver Code
 
    public static void main (String[] args) {
            int arr[] = { 13, 2, 6, 1 };
 
    int n = arr.length;
 
    int a = 5;
 
    getElements(a, arr, n);
    }
}
// This code is contributed by anuj_67..

                    
# Python3 program to find the array
# elements using xor of consecutive elements
 
# Function to find the array elements
# using XOR of consecutive elements
 
def getElements(a, arr, n):
     
    # array to store the original elements
    elements = [1 for i in range(n + 1)]
     
    # first elements a i.e elements[0]=a
    elements[0] = a
     
    for i in range(n):
         
        # To get the next elements we have to
        # calculate xor of previous elements
        # with given xor of 2 consecutive elements.
        # e.g. if a^b=k1 so to get b xor a both side.
        # b = k1^a
        elements[i + 1] = arr[i] ^ elements[i]
             
    # Printing the original array elements
    for i in range(n + 1):
        print(elements[i], end = " ")
 
# Driver code
arr = [13, 2, 6, 1]
n = len(arr)
a = 5
getElements(a, arr, n)
 
# This code is contributed by Mohit Kumar

                    
// C# program to find the array elements
// using XOR of consecutive elements
 
using System;
 
class GFG {
    // Function to find the array elements
    // using XOR of consecutive elements
    static void getElements(int a, int []arr, int n)
    {
        // array to store the original
        // elements
        int []elements = new int[n + 1];
     
        // first element a i.e elements[0]=a
        elements[0] = a;
     
        for (int i = 0; i < n; i++) {
     
            /* To get the next elements we have to calculate
                xor of previous elements with given xor of 2
                consecutive elements.
                e.g. if a^b=k1 so to get b xor a both side.
                b = k1^a
            */
            elements[i + 1] = arr[i] ^ elements[i];
        }
     
        // Printing the original array elements
        for (int i = 0; i < n + 1; i++)
            Console.Write( elements[i] + " ");
    }
 
    // Driver Code
    public static void Main () {
            int []arr = { 13, 2, 6, 1 };
 
            int n = arr.Length;
 
            int a = 5;
 
            getElements(a, arr, n);
    }
        // This code is contributed by Ryuga
}

                    
<?php
// PHP program to find the array elements
// using XOR of consecutive elements
 
// Function to find the array elements
// using XOR of consecutive elements
function getElements($a, &$arr, &$n)
{
    // array to store the original
    // elements
     
    // first element a i.e elements[0]=a
    $elements[0] = $a;
 
    for ($i = 0; $i < $n; $i++)
    {
 
        /*  To get the next elements we have to
            calculate xor of previous elements
            with given xor of 2 consecutive elements.
            e.g. if a^b=k1 so to get b xor a both side.
            b = k1^a
        */
        $elements[$i + 1] = $arr[$i] ^ $elements[$i];
    }
 
    // Printing the original array elements
    for ($i = 0; $i < $n + 1; $i++)
    {
        echo($elements[$i] . " ");
    }
}
 
// Driver Code
$arr = array(13, 2, 6, 1);
 
$n = sizeof($arr);
 
$a = 5;
 
getElements($a, $arr, $n);
 
// This code is contributed by Shivi_Aggarwal
?>

                    
<script>
 
// Javascript program to find the array elements
// using XOR of consecutive elements
     
// Function to find the array elements
// using XOR of consecutive elements
function getElements(a, arr, n)
{
     
    // Array to store the original
    // elements
    let elements = new Array(n + 1);
    for(let i = 0; i < n + 1; i++)
    {
        elements[i] = 0;
    }
   
    // first element a i.e elements[0]=a
    elements[0] = a;
   
    for(let i = 0; i < n; i++)
    {
         
        /* To get the next elements we have to calculate
            xor of previous elements with given xor of 2
            consecutive elements.
            e.g. if a^b=k1 so to get b xor a both side.
            b = k1^a
        */
        elements[i + 1] = arr[i] ^ elements[i];
    }
   
    // Printing the original array elements
    for(let i = 0; i < n + 1; i++)
        document.write( elements[i] + " ");
}
 
// Driver Code
let arr = [ 13, 2, 6, 1 ];
let n = arr.length;
let a = 5;
 
getElements(a, arr, n);
 
// This code is contributed by unknown2108
 
</script>

                    

Output
5 8 10 12 13 

Complexity Analysis:


Article Tags :