-
魔方阵说明
魔方阵是一个N*N的矩阵;
该矩阵每一行,每一列,对角线之和都相等。 -
魔方阵举例:
三阶魔方阵:
8 1 6
3 5 7
4 9 2
每一行之和:8+1+6=15;
3+5+7=15;
4+9+2=15;
每一列之和:8+3+4=15;
1+5+9=15;
6+7+2=15;
对角线之和:8+5+2=15;
6+5+4=15; -
魔方阵计算规律(行,列以1开始)
- 将“1”放在第一行,中间一列
- 从2开始至N*N各数按如下规律:
每一个数存放的行比上一个数的行减1;
每一个数存放的列比上一个数的列加1; - 当一个数行为1,下一数行为N;
- 当一个数列为N,下一个数列为1,行数减1;
- 若按上述规则确定的位置有数字,或上一个数位第1行第N列,下一个数字位置为上一个数的正下方(即行数减1,列数不变)。
-
代码
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 3
int main()
{
int a[N][N] = {0};
int count = 1;
int row=0,col = N/2;
while(count<=N*N)
{
a[row][col] = count;
int i=row;
int 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))
{
i=row+1;
j=col;
}
row = i;
col = j;
count++;
}
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
return 0;
}