XOR bit a bit de una array binaria

Dada una array binaria arr[] , la tarea es calcular el XOR bit a bit de todos los elementos de esta array e imprimirlo.

Ejemplos: 

Entrada: arr[] = {“100”, “1001”, “0011”} 
Salida: 1110 
0100 XOR 1001 XOR 0011 = 1110

Entrada: arr[] = {“10”, “11”, “1000001”} 
Salida: 1000000 

Acercarse: 

  • Paso 1: primero encuentre la string binaria de tamaño máximo.
  • Paso 2: haga que todas las strings binarias en una array tengan el tamaño de la string de tamaño máximo, agregando 0 en el bit más significativo
  • Paso 3: ahora busque la string resultante realizando XOR bit a bit en todas las strings binarias de la array.

Por ejemplo: 

  1. Deje que la array binaria sea {“100”, “001” y “1111”}.
  2. Aquí la string binaria de tamaño máximo es 4.
  3. Haga todas las strings binarias en la array de tamaño 4, agregando 0 en el MSB. Ahora la array binaria se convierte en {“0100”, “0001” y “1111”}
  4. Realizando XOR bit a bit en todas las strings binarias en la array
“0100” XOR “0001” XOR “1111” = “1110”

A continuación se muestra la implementación del enfoque anterior:  

C++

// C++ implementation of the approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the bitwise XOR
// of all the binary strings
void strBitwiseXOR(string* arr, int n)
{
    string result;
 
    int max_len = INT_MIN;
 
    // Get max size and reverse each string
    // Since we have to perform XOR operation
    // on bits from right to left
    // Reversing the string will make it easier
    // to perform operation from left to right
    for (int i = 0; i < n; i++) {
        max_len = max(max_len,
                      (int)arr[i].size());
        reverse(arr[i].begin(),
                arr[i].end());
    }
 
    for (int i = 0; i < n; i++) {
 
        // Add 0s to the end
        // of strings if needed
        string s;
        for (int j = 0;
             j < max_len - arr[i].size();
             j++)
            s += '0';
 
        arr[i] = arr[i] + s;
    }
 
    // Perform XOR operation on each bit
    for (int i = 0; i < max_len; i++) {
        int pres_bit = 0;
 
        for (int j = 0; j < n; j++)
            pres_bit = pres_bit ^ (arr[j][i] - '0');
 
        result += (pres_bit + '0');
    }
 
    // Reverse the resultant string
    // to get the final string
    reverse(result.begin(), result.end());
 
    // Return the final string
    cout << result;
}
 
// Driver code
int main()
{
    string arr[] = { "1000", "10001", "0011" };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    strBitwiseXOR(arr, n);
    return 0;
}

Java

// Java implementation of the approach
import java.io.*;
import java.util.*;
 
class GFG{
 
// Function to return the
// reverse string
static String reverse(String str)
{
    String rev = "";
    for(int i = str.length() - 1; i >= 0; i--)
        rev = rev + str.charAt(i);
 
    return rev;
}
 
// Function to return the bitwise XOR
// of all the binary strings
static String strBitwiseXOR(String[] arr, int n)
{
    String result = "";
 
    int max_len = Integer.MIN_VALUE;
 
    // Get max size and reverse each string
    // Since we have to perform XOR operation
    // on bits from right to left
    // Reversing the string will make it easier
    // to perform operation from left to right
    for(int i = 0; i < n; i++)
    {
        max_len = Math.max(max_len,
                  (int)arr[i].length());
        arr[i] = reverse(arr[i]);
    }
 
    for(int i = 0; i < n; i++)
    {
         
        // Add 0s to the end
        // of strings if needed
        String s = "";
        for(int j = 0;
                j < max_len - arr[i].length();
                j++)
            s += '0';
 
        arr[i] = arr[i] + s;
    }
 
    // Perform XOR operation on each bit
    for(int i = 0; i < max_len; i++)
    {
        int pres_bit = 0;
 
        for(int j = 0; j < n; j++)
            pres_bit = pres_bit ^
                      (arr[j].charAt(i) - '0');
 
        result += (char)(pres_bit + '0');
    }
 
    // Reverse the resultant string
    // to get the final string
    result = reverse(result);
 
    // Return the final string
    return result;
}
 
// Driver code
public static void main(String[] args)
{
    String[] arr = { "1000", "10001", "0011" };
    int n = arr.length;
 
    System.out.print(strBitwiseXOR(arr, n));
}
}
 
// This code is contributed by akhilsaini

Python3

# Function to return the bitwise XOR
# of all the binary strings
import sys
def strBitwiseXOR(arr, n):
    result = ""
    max_len = -1
  
    # Get max size and reverse each string
    # Since we have to perform XOR operation
    # on bits from right to left
    # Reversing the string will make it easier
    # to perform operation from left to right
    for i in range(n):
        max_len = max(max_len, len(arr[i]))
        arr[i] = arr[i][::-1]
  
    for i in range(n):
        # Add 0s to the end
        # of strings if needed
        s = ""
        # t = max_len - len(arr[i])
        for j in range(max_len - len(arr[i])):
            s += "0"
  
        arr[i] = arr[i] + s
  
    # Perform XOR operation on each bit
    for i in range(max_len):
        pres_bit = 0
  
        for j in range(n):
            pres_bit = pres_bit ^ (ord(arr[j][i]) - ord('0'))
  
        result += chr((pres_bit) + ord('0'))
  
    # Reverse the resultant string
    # to get the final string
    result = result[::-1]
  
    # Return the final string
    print(result)
   
# Driver code
if(__name__ == "__main__"):
    arr = ["1000", "10001", "0011"]
    n = len(arr)
    strBitwiseXOR(arr, n)
 
# This code is contributed by skylags

C#

// C# implementation of the approach
using System;
 
class GFG{
 
// Function to return the
// reverse string
static string reverse(string str)
{
    string rev = "";
    for(int i = str.Length - 1; i >= 0; i--)
        rev = rev + str[i];
 
    return rev;
}
 
// Function to return the bitwise XOR
// of all the binary strings
static string strBitwiseXOR(string[] arr, int n)
{
    string result = "";
 
    int max_len = int.MinValue;
 
    // Get max size and reverse each string
    // Since we have to perform XOR operation
    // on bits from right to left
    // Reversing the string will make it easier
    // to perform operation from left to right
    for(int i = 0; i < n; i++)
    {
        max_len = Math.Max(max_len,
                          (int)arr[i].Length);
        arr[i] = reverse(arr[i]);
    }
 
    for(int i = 0; i < n; i++)
    {
         
        // Add 0s to the end
        // of strings if needed
        string s = "";
        for(int j = 0;
                j < max_len - arr[i].Length;
                j++)
            s += '0';
 
        arr[i] = arr[i] + s;
    }
 
    // Perform XOR operation on each bit
    for(int i = 0; i < max_len; i++)
    {
        int pres_bit = 0;
 
        for(int j = 0; j < n; j++)
            pres_bit = pres_bit ^
                       (arr[j][i] - '0');
 
        result += (char)(pres_bit + '0');
    }
     
    // Reverse the resultant string
    // to get the final string
    result = reverse(result);
 
    // Return the final string
    return result;
}
 
// Driver code
public static void Main()
{
    string[] arr = { "1000", "10001", "0011" };
    int n = arr.Length;
 
    Console.Write(strBitwiseXOR(arr, n));
}
}
 
// This code is contributed by akhilsaini

Javascript

<script>
 
// Javascript implementation of the approach
 
// Function to return the bitwise XOR
// of all the binary strings
function strBitwiseXOR(arr, n)
{
    var result = "";
 
    var max_len = -1000000000;
 
    // Get max size and reverse each string
    // Since we have to perform XOR operation
    // on bits from right to left
    // Reversing the string will make it easier
    // to perform operation from left to right
    for (var i = 0; i < n; i++) {
        max_len = Math.max(max_len,
                       arr[i].length);
        arr[i] = arr[i].split('').reverse().join('');
    }
 
    for (var i = 0; i < n; i++) {
 
        // Add 0s to the end
        // of strings if needed
        var s;
        for (var j = 0;
             j < max_len - arr[i].length;
             j++)
            s += '0';
 
        arr[i] = arr[i] + s;
    }
 
    // Perform XOR operation on each bit
    for (var i = 0; i < max_len; i++) {
        var pres_bit = 0;
 
        for (var j = 0; j < n; j++)
            pres_bit = pres_bit ^ (arr[j][i] - '0'.charCodeAt(0));
 
        result += (pres_bit + '0'.charCodeAt(0));
    }
 
    // Reverse the resultant string
    // to get the final string
    result = result.split('').reverse().join('');
 
    // Return the final string
    document.write( result);
}
 
// Driver code
var arr = ["1000", "10001", "0011"];
var n = arr.length;
strBitwiseXOR(arr, n);
 
</script>
Producción: 

11010

 

Publicación traducida automáticamente

Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *