C算法题——输出奇数阶魔方阵
魔方阵:每一行、每一列、对角线的数之和均相等的数阵
规则:
-
1、第一行(及数组第0行)的中间列填1
-
2、后续数按如下规则放置:
2.1 行为上一个数的行数减1,列为上一个数的列数加1
2.2 当上一个数行为1,下一个数行为n
2.3当上一个数列为n,下一个数列为1,行减1 -
3、若按2规则放置的位置有数字或者上一个数为第一行第n列,则下一个数放置在上一个数的正下方。
代码:
i
nt n;
sanf("%d",&n); //输入阶数
int a[n][n]={0};
int digit=1,row=0,col=0;//初始数字为1,0行0列
while(digit<n*n){
int i=row,j=col; //赋值上一个数的行列值,以判断操作
if(i==0) //若上一个数位于第一行,则当前行数改为最后一行
i=n-1;
else //负责行数减一
i=i-1;
j=(j+1)%n; //列数先做加一操作
if(a[i][j]!=0||(row==0&&col=n-1)){
//若上述位置已经有数或上一个数位于第一行第n列
i=row+1;
j=col;
}
//记录当前值的行列数为上一个值得行列值
row=i;
col=j;
++count;
}
/*算法结束,打印数组即可*/