Suma de ambas diagonales de una array cuadrada espiral de orden impar

Hemos dado una array espiral de orden impar, en la que comenzamos con el número 1 como centro y nos movemos hacia la derecha en el sentido de las agujas del reloj.

Ejemplos: 

Input : n = 3 
Output : 25
Explanation : spiral matrix = 
7 8 9
6 1 2
5 4 3
The sum of diagonals is 7+1+3+9+5 = 25

Input : n = 5
Output : 101
Explanation : spiral matrix of order 5
21 22 23 23 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13
The sum of diagonals is 21+7+1+3+13+
25+9+5+17 = 101

Si observamos más de cerca la array espiral de nxn, podemos notar que el elemento de la esquina superior derecha tiene un valor n 2 . El valor de la esquina superior izquierda es (n^2) – (n-1) [¿Por qué? no es que nos movamos en sentido contrario a las agujas del reloj en la array espiral, por lo que obtenemos el valor de la parte superior izquierda después de restar n-1 de la parte superior derecha]. De manera similar, los valores de la esquina inferior izquierda son (n ^ 2) – 2 (n-1) y la esquina inferior derecha es (n ^ 2) – 3 (n-1). Después de sumar las cuatro esquinas, obtenemos 4[(n^2)] – 6(n-1).

Sea f(n) la suma de los elementos diagonales de una array xn. Usando las observaciones anteriores, podemos escribir recursivamente f(n) como: 

f(n) = 4[(n^2)] – 6(n-1) + f(n-2)  

De la relación anterior, podemos encontrar la suma de todos los elementos diagonales de una array espiral con la ayuda del método iterativo.

spiralDiaSum(n)
{
    if (n == 1)
       return 1;

    // as order should be only odd
    // we should pass only odd-integers
    return (4*n*n - 6*n + 6 + spiralDiaSum(n-2));
}

A continuación se muestra la implementación. 

C++

// C++ program to find sum of
// diagonals of spiral matrix
#include<bits/stdc++.h>
using namespace std;
 
// function returns sum of diagonals
int spiralDiaSum(int n)
{
    if (n == 1)
        return 1;
 
    // as order should be only odd
    // we should pass only odd-integers
    return (4*n*n - 6*n + 6 + spiralDiaSum(n-2));
}
 
// Driver program
int main()
{
    int n = 7;
    cout <<  spiralDiaSum(n);
    return 0;
}

Java

// Java program to find sum of
// diagonals of spiral matrix
 
class GFG
{
    // function returns sum of diagonals
    static int spiralDiaSum(int n)
    {
        if (n == 1)
            return 1;
     
        // as order should be only odd
        // we should pass only odd-integers
        return (4 * n * n - 6 * n + 6 +
                     spiralDiaSum(n - 2));
    }
     
    // Driver program to test
    public static void main (String[] args)
    {
        int n = 7;
        System.out.print(spiralDiaSum(n));
    }
}
 
// This code is contributed by Anant Agarwal.

Python3

# Python3 program to find sum of
# diagonals of spiral matrix
 
# function returns sum of diagonals
def spiralDiaSum(n):
     
    if n == 1:
        return 1
 
    # as order should be only odd
    # we should pass only odd
    # integers
    return (4 * n*n - 6 * n + 6 +
               spiralDiaSum(n-2))
     
# Driver program
n = 7;
print(spiralDiaSum(n))
 
# This code is contributed by Anant Agarwal.

C#

// C# program to find sum of
// diagonals of spiral matrix
using System;
 
class GFG  {
     
    // function returns sum of diagonals
    static int spiralDiaSum(int n)
    {
        if (n == 1)
            return 1;
     
        // as order should be only odd
        // we should pass only odd-integers
        return (4 * n * n - 6 * n + 6 +
                spiralDiaSum(n - 2));
    }
     
    // Driver code
    public static void Main (String[] args)
    {
        int n = 7;
        Console.Write(spiralDiaSum(n));
    }
}
 
// This code is contributed by parashar...

PHP

<?php
// PHP program to find sum of
// diagonals of spiral matrix
 
// function returns sum
// of diagonals
function spiralDiaSum( $n)
{
    if ($n == 1)
        return 1;
 
    // as order should be only odd
    // we should pass only odd-integers
    return (4 * $n * $n - 6 * $n + 6 +
                spiralDiaSum($n - 2));
}
 
// Driver Code
$n = 7;
echo spiralDiaSum($n);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
 
// Javascript program to find sum of
// diagonals of spiral matrix
 
// function returns sum of diagonals
function spiralDiaSum(n)
{
    if (n == 1)
        return 1;
 
    // as order should be only odd
    // we should pass only odd-integers
    return (4*n*n - 6*n + 6 +
            spiralDiaSum(n-2));
}
 
// Driver program
    let n = 7;
    document.write(spiralDiaSum(n));
 
</script>

Producción : 

261

Complejidad temporal: O(n).
Espacio auxiliar: O (n), ya que se crea una pila implícita debido a una llamada recursiva

Este artículo es una contribución de Aarti_Rathi y Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

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 *