#include<stdio.h>
#include<assert.h>
void MagicSquare()
{
#define ROW 5//魔方阵行数
int arr[ROW][ROW]={0};//必须初始化为0
int preROW;//前一个数据存放的行
int preCol;//前一个数据存放的列
int i;
int j;
assert(ROW%2!=0);//魔方阵必须为奇数
arr[0][ROW/2]=1;//1总是放在第一行中间
preROW=0;
preCol=ROW/2;
for(i=2;i<=ROW*ROW;i++)//填充魔方阵
{
if(arr[(preROW+ROW-1)%ROW][(preCol+1)%ROW]!=0)//正常位置已被占用
{
preROW=(preROW+ROW+1)%ROW;
}
}
else
{
preROW=(preROW+ROW-1)%ROW;//第1行的前1行为第ROW行
preCol=(preCol+1)%ROW;//第1行的前1行为第ROW列
}
arr[preROW][preCol]=i;
}
for(i=0;i<ROW;i++)
{
for(j=0;j<ROW;j++)
{
printf("%-4d",arr[i][j]);
}
printf("\n");
}
#undef ROW//解除ROW的宏定义
}
int main()
{
MagicSquare();
return 0;
}
- 运行结果如图