#include <stdio.h>
#define N 13
int main()
{
int i, j;
int x = 0, y = N/2; //要求从第一行中间位置开始
int a[N][N] = { 0 }; //定义一个二维数组来储存魔方阵
printf("%d阶魔方阵如下:\n",N);
for(i=0;i<N*N;i++) //在二维数组中生成魔方阵
{
a[x][y] = i + 1; //将i+1存储到a[x][y]这个位置
x = --x == -1 ? N-1 : x; //x循环减1
y = (y + 1) % N; //y循环加1
if (a[x][y] != 0) //判断此时位置上是否有非零数
{
x = (x + 2) % N; //若表有非零数,则行数循环加2相当于原行数加1
y = --y == -1 ? N-1 : y; //y循环减1恢复原来的列
}
}
for (i = 0; i < N; i++) //输出魔方阵(二维数组)
{
for (j = 0; j < N; j++)
printf("%4d", a[i][j]);
printf("\n"); //每输出一行就回车
}
return 0;
}
#define N 13
int main()
{
int i, j;
int x = 0, y = N/2; //要求从第一行中间位置开始
int a[N][N] = { 0 }; //定义一个二维数组来储存魔方阵
printf("%d阶魔方阵如下:\n",N);
for(i=0;i<N*N;i++) //在二维数组中生成魔方阵
{
a[x][y] = i + 1; //将i+1存储到a[x][y]这个位置
x = --x == -1 ? N-1 : x; //x循环减1
y = (y + 1) % N; //y循环加1
if (a[x][y] != 0) //判断此时位置上是否有非零数
{
x = (x + 2) % N; //若表有非零数,则行数循环加2相当于原行数加1
y = --y == -1 ? N-1 : y; //y循环减1恢复原来的列
}
}
for (i = 0; i < N; i++) //输出魔方阵(二维数组)
{
for (j = 0; j < N; j++)
printf("%4d", a[i][j]);
printf("\n"); //每输出一行就回车
}
return 0;
}