就是一个3阶幻方的问题!
看一个例子把(奇数次幻方);
算法是这样的:
1.先将1放在第一行的中间位置。
2.从“2”开始直到N*N止,各数依次按下列规则放数:每个数放的行在前一个数的行数减1,列数加1.
3.如果上一个数的行数为1,则下一个数的行数为最后一行。当上一个数的列数为最后一列时,下一个列数为第一列。
4.如果下一个数应放的位置已被占,则下一个数放在上一个数的下面。
main()
{ int a[19][19],i,j,k,m,n,p;
p=1;
while(p==1)
{ printf("\n\n The program of print a 19*19 bewitching phalanx\n\n");
printf("Enter n (n is a odd number from 1 to 19):> ");
scanf("%d",&n);
if((n!=0)&&(n<=19)&&(n%2==1))
p=0;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
j=n/2;
a[0][j]=1;
for(k=2;k<=n*n;k++)
{ i=i-1;
j=j+1;
if((i<0)&&(j>n-1))
{ i=i+2;
j=j-1;
}
else
{ if(i<0)
i=n-1;
if(j>n-1)
j=0;
}
if(a[i][j]==0)
a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
}
}
printf("\n");
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\nThank you to use the program ! Pass any key to exit ...");
delay(20);
getch();
}