Beschreibung des magischen Quadrats:
- Ein magisches Quadrat ist eine N*N-Matrix;
- Die Summe jeder Zeile, jeder Spalte und der Diagonalen dieser Matrix sind alle gleich;
Beispiel für ein magisches Quadrat:
Magisches Quadrat 3. Ordnung:
8 1 6 3 5 7 4 9 2
Summe jeder Zeile:
8+1+6=15;
3+5+7=15;
4+9+2=15;
Summe jeder Spalte:
8+3+4=15;
1+5+9=15;
6+7+2=15;
Summe der Diagonalen:
8+5+2=15;
6+5+4=15;
Berechnungsregeln für magische Quadrate (Zeilen und Spalten beginnen bei 1):
1. Platzieren Sie "1" in die erste Zeile, mittlere Spalte;
2. Von 2 bis N*N folgt jede Zahl dieser Regel: Die Zeile, in der jede Zahl gespeichert wird, ist die Zeile der vorherigen Zahl minus 1; die Spalte, in der jede Zahl gespeichert wird, ist die Spalte der vorherigen Zahl plus 1;
3. Wenn die Zeile einer Zahl 1 ist, ist die Zeile der nächsten Zahl N;
4. Wenn die Spalte einer Zahl N ist, ist die Spalte der nächsten Zahl 1, und die Zeilennummer verringert sich um 1;
5. Wenn die durch die obigen Regeln bestimmte Position bereits eine Zahl enthält oder die vorherige Zahl in der 1. Zeile und N-ten Spalte steht,
die nächste Zahl wird direkt unter der vorherigen Zahl platziert (d. h., die Zeilennummer verringert sich um 1, die Spalte bleibt unverändert);
Quellcode
#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");
}
Die Ausgabe des obigen Codes ist:
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