思路:数字1位于第一行中间,后面一个数比前面一个数行数少一列数加一(行数为第一行则跳至最后一行,列数为最后一行则跳至第一行)。如果前一个数字为阶数的倍数,则后面一个数行数加一列数不变
/*
时间:2020/08/15
目的:输出魔方阵的奇魔方类型
功能:对于数组的一些操作
*/
#include <stdio.h>
#define N 5
int main()
{
int a[N][N],i=0,j,num;
j=(N-1)/2;
a[i][j]=1;
for(num=2;num<N*N;num++){
if((num-1)%N==0)//判断前一个数是否为阶数的倍数
i++;//前一个数字为阶数的倍数,则后面一个数行数加一列数不变
else{
i--;
i=(i+N)%N;//保证行数为第一行则跳至最后一行
j++;
j=j%N;//保证列数为最后一行则跳至第一行
}
a[i][j]=num;
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%5d",a[i][j]);
}
printf("\n");
}
return 0;
}
/*
总结:创建一个二维数组进行部分赋值与输出即可
-----------------------
在dev中输出结果为
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 26 2 9 正确
-----------------------
*/