XOR de elementos diagonales principales de una array 3D

Dada una array 3D mat[][][] de dimensiones N * N * N que consta de números enteros positivos, la tarea es calcular Bitwise XOR de todos los elementos de la array presentes en la diagonal principal.

Ejemplos:

Entrada: arr[][][] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}
Salida: 12
Explicación: Los elementos principales de la diagonal son { 1, 8, 2, 7}. Por lo tanto, el Bitwise XOR de todos estos elementos es 12.

Entrada: arr[][][]={{{1}}}
Salida: 0
Explicación: Hay 2 diagonales principales de la array {1}, {1}. Por lo tanto, el Bitwise XOR de los principales elementos diagonales es 0.

Enfoque ingenuo: el enfoque más simple para resolver el problema es atravesar la array 3D dada mat[][][] usando tres bucles anidados , usando variables, digamos i , j y k , y calcular Bitwise XOR de mat[i][ j][k] y mat[i][j][N – k – 1] , si el valor de i , j y k son iguales. Después de completar el recorrido de la array, imprima el valor de Bitwise XOR obtenido.

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

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to calculate Bitwise XOR of
// major diagonal elements of 3D matrix
void findXOR(
    vector<vector<vector<int> > >& mat,
    int N)
{
    // Stores the Bitwise XOR of
    // the major diagonal elements
    int XOR = 0;
 
    for (int i = 0; i < N; i++) {
 
        for (int j = 0; j < N; j++) {
 
            for (int k = 0; k < N; k++) {
 
                // If element is part
                // of major diagonal
                if ((i == j && j == k)) {
 
                    XOR ^= mat[i][j][k];
                    XOR ^= mat[i][j][N - k - 1];
                }
            }
        }
    }
 
    // Print the resultant Bitwise XOR
    cout << XOR << "\n";
}
 
// Driver Code
int main()
{
    vector<vector<vector<int> > > mat
        = { { { 1, 2 }, { 3, 4 } },
            { { 5, 6 }, { 7, 8 } } };
    int N = mat.size();
 
    findXOR(mat, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG{
 
// Function to calculate Bitwise XOR of
// major diagonal elements of 3D matrix
static void findXOR(int mat[][][], int N)
{
     
    // Stores the Bitwise XOR of
    // the major diagonal elements
    int XOR = 0;
 
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            for(int k = 0; k < N; k++)
            {
                 
                // If element is part
                // of major diagonal
                if ((i == j && j == k))
                {
                    XOR ^= mat[i][j][k];
                    XOR ^= mat[i][j][N - k - 1];
                }
            }
        }
    }
 
    // Print the resultant Bitwise XOR
    System.out.println(XOR);
}
 
// Driver Code
public static void main(String[] args)
{
    int mat[][][] = { { { 1, 2 }, { 3, 4 } },
                      { { 5, 6 }, { 7, 8 } } };
    int N = mat.length;
 
    findXOR(mat, N);
}
}
 
// This code is contributed by Kingash

Python3

# Python3 program for the above approach
 
# Function to calculate Bitwise XOR of
# major diagonal elements of 3D matrix
def findXOR(mat, N):
     
    # Stores the Bitwise XOR of
    # the major diagonal elements
    XOR = 0
 
    for i in range(N):
        for j in range(N):
            for k in range(N):
                 
                # If element is part
                # of major diagonal
                if ((i == j and j == k)):
                    XOR ^= mat[i][j][k]
                    XOR ^= mat[i][j][N - k - 1]
                 
    # Print the resultant Bitwise XOR
    print(XOR)
 
# Driver Code
mat = [ [ [ 1, 2 ], [ 3, 4 ] ],
        [ [ 5, 6 ], [ 7, 8 ] ] ]
         
N = len(mat)
 
findXOR(mat, N)
 
# This code is contributed by splevel62

C#

// C# program for the above approach
using System;
 
class GFG{
 
// Function to calculate Bitwise XOR of
// major diagonal elements of 3D matrix
static void findXOR(int[, , ] mat, int N)
{
     
    // Stores the Bitwise XOR of
    // the major diagonal elements
    int XOR = 0;
 
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            for(int k = 0; k < N; k++)
            {
                 
                // If element is part
                // of major diagonal
                if ((i == j && j == k))
                {
                    XOR ^= mat[i, j, k];
                    XOR ^= mat[i, j, N - k - 1];
                }
            }
        }
    }
 
    // Print the resultant Bitwise XOR
    Console.WriteLine(XOR);
}
 
// Driver Code
public static void Main(string[] args)
{
    int[,,] mat = { { { 1, 2 }, { 3, 4 } },
                    { { 5, 6 }, { 7, 8 } } };
    int N = mat.GetLength(0);
 
    findXOR(mat, N);
}
}
 
// This code is contributed by ukasp

Javascript

<script>
// JavaScript program for the above approach
 
// Function to calculate Bitwise XOR of
// major diagonal elements of 3D matrix
function findXOR(mat, N)
{
      
    // Stores the Bitwise XOR of
    // the major diagonal elements
    let XOR = 0;
  
    for(let i = 0; i < N; i++)
    {
        for(let j = 0; j < N; j++)
        {
            for(let k = 0; k < N; k++)
            {
                  
                // If element is part
                // of major diagonal
                if ((i == j && j == k))
                {
                    XOR ^= mat[i][j][k];
                    XOR ^= mat[i][j][N - k - 1];
                }
            }
        }
    }
  
    // Print the resultant Bitwise XOR
    document.write(XOR);
}
 
 
// Driver Code
 
    let mat = [[[1, 2 ], [ 3, 4 ]],
                     [[ 5, 6 ], [ 7, 8 ]]];
    let N = mat.length;
  
    findXOR(mat, N);
     
</script>
Producción: 

12

 

Complejidad de Tiempo: O(N 3 )
Espacio Auxiliar: O(1)

Enfoque eficiente: el enfoque anterior se puede optimizar utilizando el hecho de que el elemento cuyos índices i , j y k son los mismos que los elementos diagonales. Por lo tanto, la idea es iterar sobre el rango de índices [0, N – 1] usando una variable i y calcular Bitwise XOR de todos los elementos que forman parte de las diagonales principales en los índices (i, i, i) y (i , i, N – i – 1) en la array dada mat[][][] como mat[i][i][i] y mat[i][i][N – i – 1] respectivamente.

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

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the Bitwise XOR of
// both diagonal elements of 3D matrix
void findXOR(
    vector<vector<vector<int> > >& mat,
    int N)
{
    // Stores the Bitwise XOR of the
    // major diagonal elements
    int XOR = 0;
 
    for (int i = 0; i < N; i++) {
 
        XOR ^= mat[i][i][i];
        XOR ^= mat[i][i][N - i - 1];
    }
 
    // Print the resultant Bitwise XOR
    cout << XOR << "\n";
}
 
// Driver Code
int main()
{
    vector<vector<vector<int> > > mat
        = { { { 1, 2 }, { 3, 4 } },
            { { 5, 6 }, { 7, 8 } } };
    int N = mat.size();
 
    findXOR(mat, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG{
 
// Function to calculate Bitwise XOR of
// major diagonal elements of 3D matrix
static void findXOR(int mat[][][], int N)
{
     
    // Stores the Bitwise XOR of the
    // major diagonal elements
    int XOR = 0;
 
    for(int i = 0; i < N; i++)
    {
        XOR ^= mat[i][i][i];
        XOR ^= mat[i][i][N - i - 1];
    }
     
    // Print the resultant Bitwise XOR
    System.out.println(XOR);
}
 
// Driver Code
public static void main(String[] args)
{
    int mat[][][] = { { { 1, 2 }, { 3, 4 } },
                      { { 5, 6 }, { 7, 8 } } };
    int N = mat.length;
 
    findXOR(mat, N);
}
}
 
// This code is contributed by Kingash

Python3

# Python3 program for the above approach
 
# Function to find the Bitwise XOR of
# both diagonal elements of 3D matrix
def findXOR(mat, N):
     
    # Stores the Bitwise XOR of the
    # major diagonal elements
    XOR = 0
  
    for i in range(N):
        XOR ^= mat[i][i][i]
        XOR ^= mat[i][i][N - i - 1]
     
    # Print the resultant Bitwise XOR
    print(XOR)
 
# Driver Code
mat = [ [ [ 1, 2 ], [ 3, 4 ] ],
        [ [ 5, 6 ], [ 7, 8 ] ] ] 
N = len(mat)
  
findXOR(mat, N)
 
# This code is contributed by sanjoy_62

C#

// C# program for the above approach
using System;
 
class GFG{
 
// Function to calculate Bitwise XOR of
// major diagonal elements of 3D matrix
static void findXOR(int[,,] mat, int N)
{
     
    // Stores the Bitwise XOR of the
    // major diagonal elements
    int XOR = 0;
 
    for(int i = 0; i < N; i++)
    {
        XOR ^= mat[i, i, i];
        XOR ^= mat[i, i, N - i - 1];
    }
     
    // Print the resultant Bitwise XOR
    Console.Write(XOR);
}
 
// Driver Code
static public void Main ()
{
    int[,,] mat = { { { 1, 2 }, { 3, 4 } },
                    { { 5, 6 }, { 7, 8 } } };
    int N = mat.GetLength(0);
 
    findXOR(mat, N);
}
}
 
// This code is contributed by avijitmondal1998

Javascript

<script>
 
// Javascript program for the above approach
 
// Function to calculate Bitwise XOR of
// major diagonal elements of 3D matrix
function findXOR( mat,  N)
{
     
    // Stores the Bitwise XOR of the
    // major diagonal elements
    let XOR = 0;
 
    for(let i = 0; i < N; i++)
    {
        XOR ^= mat[i][i][i];
        XOR ^= mat[i][i][N - i - 1];
    }
     
    // Print the resultant Bitwise XOR
    document.write(XOR);
}
 
// Driver Code
 
let mat = [ [ [ 1, 2 ], [ 3, 4 ] ],
          [ [ 5, 6 ], [ 7, 8 ] ] ];
let N = mat.length;
 
findXOR(mat, N);;
     
</script>
Producción: 

12

 

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por ajaykr00kj 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 *