该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#define N 100
void oujie(int oushu)
{
int a[N][N]={0},i,j,k=1,n,m;
n=oushu/2;
m=(oushu-2)/4;
for(i=1,j=3*n/2;k<=n*n;)
{
if(i<0)
{ i=i+3*n; continue; }
if(j>=3*n)
{ j=j-3*n; continue; }
if(j<0)
{ j=j+3*n; continue; }
if(a[i][j]!=0)
{
i=i+2*3;
j=j-1*3;
if(i>3*n)
{ i=i-3*n; continue; }
if(j<0)
{ j=j+3*n; continue; }
}
a[i][j]=k++;
i=i-3;
j=j+3;
}
for(i=1;i<3*n;i=i+3)
for(j=1;j<3*n;j=j+3)
{
if(i
a[i-1][j]=1;
else if(i==(3*(m+1)+1)&&j!=(3*(m+1)-2)||i==(3*(m+1)-2)&&j==(3*(m+1)-2))
a[i-1][j]=2;
else a[i-1][j]=3;
}
for(i=1;i<3*n;i=i+3)
for(j=1;j<3*n;j=j+3)
{
if(a[i-1][j]==1)
{
a[i-1][j-1]=4*a[i][j];
a[i-1][j+1]=4*a[i][j]-3;
a[i+1][j-1]=4*a[i][j]-2;
a[i+1][j+1]=4*a[i][j]-1;
}
if(a[i-1][j]==2)
{
a[i-1][j-1]=4*a[i][j]-3;
a[i-1][j+1]=4*a[i][j];
a[i+1][j-1]=4*a[i][j]-2;
a[i+1][j+1]=4*a[i][j]-1;
}
if(a[i-1][j]==3)
{
a[i-1][j-1]=4*a[i][j]-3;
a[i-1][j+1]=4*a[i][j];
a[i+1][j-1]=4*a[i][j]-1;
a[i+1][j+1]=4*a[i][j]-2;
}
}
for(i=0;i<3*n;i=i+1)
{
{
for(j=0;j<3*n;j=j+1)
{
printf("%4d",a[i][j]);
j=j+2;
printf("%4d",a[i][j]);
}
printf("\n");
}
i=i+2;
{
for(j=0;j<3*n;j=j+1)
{
printf("%4d",a[i][j]);
j=j+2;
printf("%4d",a[i][j]);
}
printf("\n");
}
}
}
void jijie(int n)
{
int a[N][N]={0},i,j,k=1;
for(i=0,j=n/2;k<=n*n;)
{
if(i<0)
{ i=i+n; continue; }
if(j>=n)
{ j=j-n; continue; }
if(j<0)
{ j=j+n; continue; }
if(a[i][j]!=0)
{
i=i+2;
j=j-1;
if(i>n)
{ i=i-n; continue; }
if(j<0)
{ j=j+n; continue; }
}
a[i][j]=k++;
i--;
j++;
}
for(i=0;i
{
for(j=0;j
printf("%4d",a[i][j]);
printf("\n");
}
}
main()
{
int n;
printf("偶数阶数为4n+2,且阶数为3到66之间\n");
printf("请输入幻方的阶数:");
scanf("%d",&n);
if(n%2==0&&n>=4&&n<66&&(n-2)%4==0)
oujie(n);
else if(n%2==1&&n<66)
jijie(n);
else
printf("错误的阶数!\n");