魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。
3*3魔方矩阵
1、1放在第一行中间
2、后面的数字放在当前数字上一行后一列。
3、如果当前位置已有数据则放在前一个数字的下一行同列。
8 | 1 | 6 |
3 | 5 | 7 |
4 | 9 | 2 |
//魔方阵
void MagicSquare()
{
#define ROW 5
int arr[ROW][ROW] = {0};//聚合类型初始化为零,剩下的全为零。初始化为零的原因是不能判断有没有 只能判断有没有有效数字
int currow = 0;
int curcol = ROW/2;
arr[currow][curcol] = 1;
for(int i=2;i<=ROW*ROW;i++)
{
/*//1
currow--;
if(currow < 0)
currow = ROW - 1;*/
//currow = (currow==0 ? ROW-1 : currow-1);//2
currow = (currow-1+ROW)%ROW;//3
curcol = (curcol+1)%ROW;
if(arr[currow][curcol] != 0)//已经有值
{
currow = (currow+1+1)%ROW;
curcol = (curcol-1+ROW)%ROW;
}
arr[currow][curcol] = i;
}
for(int i=0;i<ROW;i++)
{
for(int j=0;j<ROW;j++)
{
printf("%-3d",arr[i][j]);
}
printf("\n");
}
}
int main()
{
MagicSquare();
return 0;
}