首先,我们来聊一聊魔方数组。
1.魔方数组
首先,啥事魔方数组呢?例如:
6 1 8
7 5 3
2 9 4
他的每一行,每一列以及对角线的和都等于一个常数,这个常数为n*(n*n+1)/2。其中,n为阶数。
那么,我们应该怎么实现魔方数组呢?
1.我们将1安置在第一行的中间位置,及(i,j)=(1,(n+1)/2)
2.下一个数我们写到上一个数主对角线的上方,即(i1,j1)=(i-1,j-1)
3.如果在上一步中,i和j出界,则令i=n或者j=n。
4.如果,应写的位置没有出界,但是已经有数字,则将他移到下一行,但是列数不变。
代码如下:环境VS2010
<span style="font-size:24px;"> int a[100][100];
int n;//
scanf("%d",&n);
int i=1;
int j=int((n+1)/2);
int i1,j1;
int x=1;
memset(a,0,sizeof(a));
while(x<=n*n)
{
a[i][j]=x;
x++;
i1=i;
j1=j;
i--;
j--;
if (i==0)
{
i=n;
}
if (j==0)
{
j=n;
}
if (a[i][j]!=0)
{
i=i1+1;
j=j1;
}
}
for(i=1;i<=n;i++)
{
printf("\n");
for (j=1;j<=n;j++)
{
printf("%4d",a[i][j]);
}
}
</span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/jin_syuct/article/details/47173775