Dado un entero impar N , la tarea es encontrar el cuadrado mágico de orden N.
Ejemplos:
Entrada: N = 3
Salida:
6 1 8
7 5 3
2 9 4
Entrada: N = 5
Salida:
15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11
Enfoque Ponga el valor 1 en el medio de la primera fila. Sea la posición (i, j).
- Ahora suba una celda y muévase a la izquierda una celda. Mientras nos movemos hacia arriba o hacia la izquierda, si vamos más allá del límite del cuadrado, entonces consideremos una caja en el lado opuesto del cuadrado. Let (fila, columna) es la posición.
- Si el valor del cuadrado mágico en (fila, columna) está vacío, entonces (i, j) <– (fila, columna).
- Si la[fila][columna] mágica no está vacía, baje de la posición (i, j) a la siguiente fila incrementando i en 1. Pero, mientras se mueve hacia abajo, si vamos más allá del límite del cuadrado, entonces considere un caja en el lado opuesto del cuadrado.
- Inserte el siguiente número más alto en el cuadrado mágico en la posición (i, j).
- Repita el paso 1 hasta que todos los cuadrados estén llenos.
C++
// C++ implementation of the approach #include<bits/stdc++.h> using namespace std; const int MAX = 10; // Function to print the generated square void print(int mat[MAX][MAX], int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << " " << mat[i][j]; } cout << '\n'; } } // Function to generate the magic // square of order n void magic_square(int magic[MAX][MAX], int n) { // Position of the first value int i = 0; int j = (n - 1) / 2; // First value is placed // in the magic square magic[i][j] = 1; for (int k = 2; k <= n * n; k++) { // Up position int row = (i - 1 < 0) ? (n - 1) : (i - 1); // Left position int col = (j - 1 < 0) ? (n - 1) : (j - 1); // If no item is present if (magic[row][col] == 0) { // Move up and left i = row, j = col; } // Otherwise else { // Move downwards i = (i + 1) % n; } // Place the next value magic[i][j] = k; } } // Driver code int main() { int magic[MAX][MAX] = { 0 }; int n = 3; if (n % 2 == 1) { // Generate the magic square magic_square(magic, n); // Print the magic square print(magic, n); } return 0; }
Java
// Java implementation of the approach class GFG { final static int MAX = 10; // Function to print the generated square static void print(int mat[][], int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(mat[i][j] + " "); } System.out.println(); } } // Function to generate the magic // square of order n static void magic_square(int magic[][], int n) { // Position of the first value int i = 0; int j = (n - 1) / 2; // First value is placed // in the magic square magic[i][j] = 1; for (int k = 2; k <= n * n; k++) { // Up position int row = (i - 1 < 0) ? (n - 1) : (i - 1); // Left position int col = (j - 1 < 0) ? (n - 1) : (j - 1); // If no item is present if (magic[row][col] == 0) { // Move up and left i = row; j = col; } // Otherwise else { // Move downwards i = (i + 1) % n; } // Place the next value magic[i][j] = k; } } // Driver code public static void main (String[] args) { int magic[][] = new int[MAX][MAX]; int n = 3; if (n % 2 == 1) { // Generate the magic square magic_square(magic, n); // Print the magic square print(magic, n); } } } // This code is contributed by AnkitRai01
Python 3
# Python 3 implementation of the approach MAX = 10 # Function to print the generated square def printf(mat, n): for i in range(n): for j in range(n): print(mat[i][j], end = " ") print("\n", end = "") # Function to generate the magic # square of order n def magic_square(magic,n): # Position of the first value i = 0 j = (n - 1) // 2 # First value is placed # in the magic square magic[i][j] = 1 for k in range(2, n * n + 1, 1): # Up position if(i - 1 < 0): row = (n - 1) else: row = (i - 1) # Left position if(j - 1 < 0): col = (n - 1) else: col = (j - 1) # If no item is present if (magic[row][col] == 0): # Move up and left i = row j = col # Otherwise else: # Move downwards i = (i + 1) % n # Place the next value magic[i][j] = k # Driver code if __name__ == '__main__': magic = [[0 for i in range(MAX)] for j in range(MAX)] n = 3 if (n % 2 == 1): # Generate the magic square magic_square(magic, n) # Print the magic square printf(magic, n) # This code is contributed by Surendra_Gangwar
C#
// C# implementation of the approach using System; class GFG { static int MAX = 10; // Function to print the generated square static void print(int [,]mat, int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Console.Write(mat[i, j] + " "); } Console.WriteLine(); } } // Function to generate the magic // square of order n static void magic_square(int [,]magic, int n) { // Position of the first value int i = 0; int j = (n - 1) / 2; // First value is placed // in the magic square magic[i, j] = 1; for (int k = 2; k <= n * n; k++) { // Up position int row = (i - 1 < 0) ? (n - 1) : (i - 1); // Left position int col = (j - 1 < 0) ? (n - 1) : (j - 1); // If no item is present if (magic[row, col] == 0) { // Move up and left i = row; j = col; } // Otherwise else { // Move downwards i = (i + 1) % n; } // Place the next value magic[i, j] = k; } } // Driver code public static void Main(String[] args) { int [,]magic = new int[MAX, MAX]; int n = 3; if (n % 2 == 1) { // Generate the magic square magic_square(magic, n); // Print the magic square print(magic, n); } } } // This code is contributed by 29AjayKumar
Javascript
<script> // Javascript implementation of the approach var MAX = 10; // Function to print the generated square function print( mat, n) { for (var i = 0; i < n; i++) { for (var j = 0; j < n; j++) { document.write(mat[i][j]+" "); } document.write("<br>"); } } // Function to generate the magic // square of order n function magic_square(magic, n) { // Position of the first value var i = 0; var j = parseInt((n - 1) / 2); // First value is placed // in the magic square magic[i][j] = 1; for (var k = 2; k <= n * n; k++) { // Up position var row = (i - 1 < 0) ? (n - 1) : (i - 1); // Left position var col = (j - 1 < 0) ? (n - 1) : (j - 1); // If no item is present if (magic[row][col] == 0) { // Move up and left i = row, j = col; } // Otherwise else { // Move downwards i = (i + 1) % n; } // Place the next value magic[i][j] = k; } } // Driver code var magic = Array.from(Array(MAX), ()=> Array(MAX).fill(0)); var n = 3; if (n % 2 == 1) { // Generate the magic square magic_square(magic, n); // Print the magic square print(magic, n); } </script>
Producción:
6 1 8 7 5 3 2 9 4
Complejidad temporal : O(N ^ 2).
Espacio Auxiliar : O(N^2).
Publicación traducida automáticamente
Artículo escrito por sunilkannur98 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA