输入一奇数,要求产生对应的魔方矩阵。
解题思路:魔方矩阵是指这样的二维矩阵,矩阵的每一行、每一列,主对角线、副对角线上所有元素的和均相等。假设矩阵的维数是N*N,其中N为奇数,放置元素的步骤如下:
首先将第一个元素放在第一行正中间的位置;其次,如果当前放置的元素是N的倍数,则下一个数放在当前位置的正下方,如果不是N的位置,放置在当前位置的右上角。
放置元素时,将二维矩阵看成是左右相接,上下相接,可以通过对N取余实现。参考代码如下:
#include <stdio.h>
#define N 5
//magic matrix
int main()
{
int i,j;
int num;
int a[N][N];
i=0;j=N/2; //initial position
for(num=1;num<=N*N;num++)
{
a[i][j]=num;
if(num%N) //右上角
{
i=(i-1+N)%N;
j=(j+1)%N;
}
else //正下方
{
i=(i+1)%N;
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%3d",a[i][j]);
putchar('\n');
}
return 0;
}