//p23页
#include <stdio.h>
#include <stdlib.h>
//奇数魔术方阵
#define MAX 15
void magic();
int square[MAX][MAX];//矩阵最大15*15
int N;//实际大小变量
int main()
{
int i, j;
//读取矩阵大小,是个奇数,0-15之间
printf("\n输入矩阵大小: \n");
scanf("%d", &N);
if( N%2 == 0 || N <= 0 || N >=15)
printf(" 输入出错 \n");
magic();
printf("\n这是一个%d*%d的矩阵\n", N, N);
printf(" ---------\n");
for( i = 0; i < N; i++)
{
for( j = 0; j < N; j++)
printf("%4d", square[i][j]);
printf("\n");
}
return 0;
}
void magic()
{
int key = 1;
int i, j, p, q;
for( i = 0; i < N; i++)
{
for( j = 0; j < N; j++)
square[i][j] = 0;
}
square[0][(N-1)/2] = 1;
key++;
i=0;
j=(N-1)/2;//当前位置
while( key <= N*N )
{
p = (i-1);//p下一步位置横坐标
if( p < 0 )
{
p = N-1;
}
q = (j-1);//q下一步位置纵坐标
if( q < 0 )
{
q = N-1;
}
if( square[p][q] != 0 )
{
i = (i + 1);
}
else
{
i = p;
j = q;
}
square[i][j] = key;
key++;
}
}