Description du carré magique :
- Un carré magique est une matrice N*N ;
- Les sommes de chaque ligne, de chaque colonne et des diagonales de cette matrice sont toutes égales ;
Exemple de carré magique :
Carré magique d'ordre 3 :
8 1 6 3 5 7 4 9 2
Somme de chaque ligne :
8+1+6=15;
3+5+7=15;
4+9+2=15;
Somme de chaque colonne :
8+3+4=15;
1+5+9=15;
6+7+2=15;
Somme des diagonales :
8+5+2=15;
6+5+4=15;
Règles de calcul du carré magique (les lignes et les colonnes commencent à 1) :
1. Placez "1" dans la première ligne, colonne du milieu ;
2. En partant de 2 jusqu'à N*N, chaque nombre suit cette règle : la ligne où chaque nombre est stocké est la ligne du nombre précédent moins 1 ; la colonne où chaque nombre est stocké est la colonne du nombre précédent plus 1 ;
3. Lorsque la ligne d'un nombre est 1, la ligne du nombre suivant est N ;
4. Lorsque la colonne d'un nombre est N, la colonne du nombre suivant est 1, et le numéro de ligne diminue de 1 ;
5. Si la position déterminée par les règles ci-dessus contient déjà un nombre, ou si le nombre précédent se trouve à la 1re ligne et à la colonne N,
le nombre suivant est placé directement sous le nombre précédent (c'est-à-dire que le numéro de ligne diminue de 1, la colonne reste inchangée) ;
Code source
#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");
}
La sortie du code ci-dessus est :
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