关于奇数阶魔方阵
#include<stdio.h>#define N 7
void main()
{
int i,j,k,l,a[N][N];
i=l=0;
j=(N-1)/2;
k=(N-1)/2;
a[j][k]=(N*N+1)/2;
for(i=0;i<N;i++)
for(l=0;l<N;l++)
a[i][l]=0;
for(i=(N*N+3)/2;i<=N*N;i++)
{
a[j+1][k+1]=i;
j++;
k++;
if(j==N&&k==N)
{
j=j-2;
k=k-1;
}
else
if(k==N)
{
k=0;
}
if(j==N)
{
j=0;
}
if(a[j][k]!=0)
{
j=j-1;
}
}
for(l=(N*N-1)/2;l>=1;l--)
{
a[j-1][k-1]=i;
j--;
k--;
if(j==-1&&k==-1)
{
j=j+2;
k=k+1;
}
else
if(k==-1)
{
k=N-1;
}
if(j==-1)
{
j=N-1;
}
if(a[j][k]!=0)
{
j=j+1;
}
}
for(i=0;i<N;i++)
{
for(l=0;l<N;l++)
{
printf("%5d ",a[i][l]);
}
printf("\n");
}
getch();
}
运行结果不对.
麻烦大家看下.
算法的基本思路就是从中间值(N*N+1)/2开始,沿对角线递增递减.
我没看过魔方阵比较通用的解法.
这个思路自己想的.可能大家看的时候会麻烦点.
先谢过.