Programa C++ para encontrar la diferencia entre las sumas de dos diagonales

Dada una array de n X n . La tarea es calcular la diferencia absoluta entre las sumas de su diagonal.
Ejemplos: 
 

Input : mat[][] = 11 2 4
                   4 5 6
                  10 8 -12 
Output : 15
Sum of primary diagonal = 11 + 5 + (-12) = 4.
Sum of primary diagonal = 4 + 5 + 10 = 19.
Difference = |19 - 4| = 15.


Input : mat[][] = 10 2
                   4 5
Output : 7

Calcular las sumas a través de las dos diagonales de una array cuadrada. A lo largo de la primera diagonal de la array, índice de fila = índice de columna, es decir, mat[i][j] se encuentra en la primera diagonal si i = j. A lo largo de la otra diagonal, índice de fila = n – 1 – índice de columna, es decir, mat[i][j] se encuentra en la segunda diagonal si i = n-1-j. Al usar dos bucles, recorremos toda la array y calculamos la suma a través de las diagonales de la array.
A continuación se muestra la implementación de este enfoque: 
 

C++

// C++ program to find the difference
// between the sum of diagonal.
#include <bits/stdc++.h>
#define MAX 100
using namespace std;
 
int difference(int arr[][MAX], int n)
{
    // Initialize sums of diagonals
    int d1 = 0, d2 = 0;
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            // finding sum of primary diagonal
            if (i == j)
                d1 += arr[i][j];
 
            // finding sum of secondary diagonal
            if (i == n - j - 1)
                d2 += arr[i][j];
        }
    }
 
    // Absolute difference of the sums
    // across the diagonals
    return abs(d1 - d2);
}
 
// Driven Program
int main()
{
    int n = 3;
 
    int arr[][MAX] =
    {
        {11, 2, 4},
        {4 , 5, 6},
        {10, 8, -12}
    };
 
    cout << difference(arr, n);
    return 0;
}

Producción:  

15

Complejidad de tiempo : O (N * N), ya que estamos usando bucles anidados para atravesar N * N veces.

Espacio auxiliar : O(1), ya que no estamos utilizando ningún espacio adicional.
Podemos optimizar la solución anterior para trabajar en O (n) usando los patrones presentes en los índices de las celdas. 
 

C++

// C++ program to find the difference
// between the sum of diagonal.
#include <bits/stdc++.h>
#define MAX 100
using namespace std;
 
int difference(int arr[][MAX], int n)
{
    // Initialize sums of diagonals
    int d1 = 0, d2 = 0;
 
    for (int i = 0; i < n; i++)
    {
        d1 += arr[i][i];
        d2 += arr[i][n-i-1];
    }
 
    // Absolute difference of the sums
    // across the diagonals
    return abs(d1 - d2);
}
 
// Driven Program
int main()
{
    int n = 3;
 
    int arr[][MAX] =
    {
        {11, 2, 4},
        {4 , 5, 6},
        {10, 8, -12}
    };
 
    cout << difference(arr, n);
    return 0;
}

Producción:  

15

Complejidad de tiempo : O (N), ya que estamos usando un bucle para atravesar N veces.

Espacio auxiliar : O(1), ya que no estamos utilizando ningún espacio adicional.

 Consulte el artículo completo sobre Encontrar la diferencia entre las sumas de dos diagonales para obtener más detalles.

Publicación traducida automáticamente

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