魔方阵
1、奇数阶
指它的每一行、每一列以及对角线之和均相等
例如:三阶魔方阵
8 | 1 | 6 |
3 | 5 | 7 |
4 | 9 | 2 |
1、将1放在第一行的中间;
2、将后面的数字放在当前行的上一行、下一列;
3、若当前位置不为空,则将数字放在前一数字的下一行(当前位置的上两行)。
#define ROW 3
void MagicSquare()
{
int arr[ROW][ROW]={0};
int currow=0;
int curcol=ROW/2;
arr[currow][curcol]=1;
for(int i=2;i<=ROW*ROW;i++)
{
//行的写法:①
/*row--;
if(row<0)
row=ROW-1;*/
//②
//currow=(currow==0?ROW-1:currow-1)
//③
currow =(currow-1+ROW)%ROW;
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("%-3d",arr[i][j]);//输出的数字右对齐
}
printf("\n");
}
}
int main()
{
MagicSquare();
return 0;
}
2、能被4整除的魔方阵
①左上到右下对角线满足i%4==j%4;
②右上到左下对角线满足(i+j)%4=3;