偶阶魔方阵的实现步骤:
1.用横线和竖线将n阶方阵划分为m个4*4的小方阵;
2.将n*n个数从小到大,从左到右,从上到下依次填入方阵中,遇到4*4小方阵的对角线不填(此位置不填的数不作为下一个位置填入的数)
3.将n*n个数从大到小,从左到右,从上到下依次填入方阵中4*4小方阵的对角线上,其他位置不填(此位置不填的数不作为下一个位置填入的数)
4.偶阶魔方阵完成。
下面进行图解(以8阶为例):
代码实现的时候会遇到如何判断对角线的问题,我们来找一找对角线的规律:
//偶数阶魔方阵
//重点:对角线的计算
//左上到右下对角线满足i%4 == j%4
//右上到左下对角线满足(i+j)%4 == 3
void MagicSquare()
{
#define ROW 4
#define COL ROW
int arr[ROW][COL];
int tmp1 = 1;
int tmp2 = ROW*COL;
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < COL;j++)
{
if(i % 4 == j % 4 || (i + j) % 4 == 3)
{
arr[i][j] = tmp2;
}
else
{
arr[i][j] = tmp1;
}
tmp2--;
tmp1++;
}
}
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < COL;j++)
{
printf("%-4d",arr[i][j]);
}
printf("\n");
}
}
int main()
{
MagicSquare();
return 0;
}