Descripción del cuadrado mágico:
- Un cuadrado mágico es una matriz de N*N;
- La suma de cada fila, cada columna y las diagonales de la matriz son iguales;
Ejemplo de cuadrado mágico:
Cuadrado mágico de orden 3:
8 1 6 3 5 7 4 9 2
Suma de cada fila:
8+1+6=15;
3+5+7=15;
4+9+2=15;
Suma de cada columna:
8+3+4=15;
1+5+9=15;
6+7+2=15;
Suma de las diagonales:
8+5+2=15;
6+5+4=15;
Regla de cálculo del cuadrado mágico (filas y columnas comienzan en 1):
1. Coloque "1" en la primera fila, columna central;
2. Desde 2 hasta N*N, cada número sigue la siguiente regla: la fila de cada número es la fila del número anterior menos 1; la columna de cada número es la columna del número anterior más 1;
3. Cuando la fila de un número es 1, la fila del siguiente número es N;
4. Cuando la columna de un número es N, la columna del siguiente número es 1 y la fila se reduce en 1;
5. Si la posición determinada por las reglas anteriores ya tiene un número, o el número anterior está en la fila 1, columna N,
la posición del siguiente número es directamente debajo del número anterior (es decir, la fila se reduce en 1, la columna no cambia);
Código fuente
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 5
int main()
{
int a[N][N] = {0};
int count = 1;
int row = 0, cul = N / 2;
while (count <= N*N)
{
a[row][cul] = count;
int i = row;
int j = cul;
if (i == 0)
{
i = N - 1;
}
else
{
i = i - 1;
}
j = (j + 1) % N;
if (a[i][j]!=0||(row==0&&cul==N-1))
{
i = row + 1;
j = cul;
}
row = i;
cul = j;
count++;
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
system("pause");
}
El resultado de salida del código anterior es:
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9