用二维数组实现"魔方阵"的打印,所谓“魔方阵”是指满足每一行,每一列和对角线上的元素之和均相等的方阵。如:
8 1 6
3 5 7
4 9 2
就是一个三阶的魔方阵。现在要求编程实现任意输入一个自然数n,打印出相应的n阶魔方阵。
参考答案:
打印“魔方阵”算法如下所示:
void MagicMatrix( )
{
int a[16][16],i,j,k,p,m,n;
p=1;
while(p==1) /*输入1~15的奇数*/
{
printf("Please input n(n=1~15)\n");
scanf("%d",&n);
if ((n!=0) && (n<=15) &&(n%2 !=0))
p=0;
}
/*Initialization*/
for ( i=1;i<=n;i++)
for( j=1;j<=n;j++)
a[i][j]=0;
/*建立魔方阵*/
j=n/2+1;
a[1][j]=1;
for (k=2; k<=n*n;k++)
{
i=i-1;
j=j+1;
if ((i<1) && (j>n))
{
i=i+2;
j=j-1;
}
else
{
if (i<1)
i=n;
if (j>n)
j=1;
}
if (a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
/*输出魔方阵*/
for (i=1; i<=n; i++ )
{
for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}/*MagicMatrix*/