#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int **Magic1(int n) //奇数阶魔方阵
{
assert(n%2 != 0);
int **arr = (int **)malloc(sizeof(int *)*n); //创建二维数组存放魔方阵
for(int i = 0;i<n;i++)
{
arr[i] = (int *)calloc(n,sizeof(int)); //所有元素赋值为零,以判断每个位置上是否放置了有效数字
}
int row = 0;
int col = n/2;
for(int i = 0;i<n*n;i++)
{
arr[row][col] = i+1; //从0行正中开始赋值
arr[(row-1+n)%n][(col+1)%n] == 0?row = (row-1+n)%n,col = (col+1)%n:row = (row+1)%n; //如果当前位置的前一行下一列数字是0,则把下一个数字放在那里,否则放在当前位置的下一行同列
}
return arr;
}
int **Magic2(int n) //单偶数阶魔方阵(能被2整除,不能被4整除)(思路:可以分为4个奇数阶矩阵)
{
assert(n%2 == 0 && n%4 != 0);
int **arr = (int **)malloc(sizeof(int *)*n);
for(int i = 0;i<n;i++)
{
arr[i] =