#include <stdio.h>
#define N 11
int main(void)
{
int magic[N][N] = {0};
int aone=0; //赋值计数
int atwo=0; //赋值计数
int row=0; //魔方阵列下标
int line=0; //行下标
int num=0;
//判断矩阵奇偶次阶
if ( N % 2 == 0 )
{
printf("该魔方阵仅能够解决奇数阶魔方阵!\n");
return 0;
}
line=0;
row = (N + 1) / 2 - 1; //不能直接用N/2!
num = 0;
for( aone=0; aone<N; aone++)
{
for( atwo=0; atwo<N; atwo++)
{
magic[line][row]=(++num);
row+=1;
line-=1;//行减列加
if ( atwo != N - 1 )//判断是否到行末尾
{
if (line < 0)//解决行下标向下溢出问题
{
line = N - 1;
}
if (row >= N)//解决列上标向上溢出问题
{
row = 0;
}
}
}
line += 2;
row -= 1;
}
int i=0,j=0;
printf("%d阶魔方矩阵如下所示:\n", N);
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%6d", magic[i][j]);
}
printf("\n\n");
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: