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