1到25排成方阵,横竖对角相加等
任一阶幻方:
#include
#include
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void hf1(int n,int *p)
{
int m=1,i,j,k,l;
for(i=0;in*n)
break;
k=i-1;
l=j+1;
if(k==-1)
k=n-1;
if(l==n)
l=0;
if(*(p+k*n+l)!=0){
i++;
continue;
}
i=k;
j=l;
}
}
void hf2(int n,int *p)
{
int i,j,*q;
q=malloc(n*n/2);
hf1(n/...全部
任一阶幻方:
#include
#include
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void hf1(int n,int *p)
{
int m=1,i,j,k,l;
for(i=0;in*n)
break;
k=i-1;
l=j+1;
if(k==-1)
k=n-1;
if(l==n)
l=0;
if(*(p+k*n+l)!=0){
i++;
continue;
}
i=k;
j=l;
}
}
void hf2(int n,int *p)
{
int i,j,*q;
q=malloc(n*n/2);
hf1(n/2,q);
for(i=0;i=n-(n-4)/4;j--)
swap(p+i*n+j,p+(i+n/2)*n+j);
}
swap(p+(n/2-1)/2*n,p+(3*n/2-1)/2*n);
swap(p+(n/2-1)/2*n+(n/2-1)/2,p+(3*n/2-1)/2*n+(n/2-1)/2);
}
void hf3(int n,int *p)
{
int i,j,k,m=1;
for(i=0;i=n/2;i++,j--){
if(i==n)
i=0;
swap(p+i*n+j,p+(n-1-i)*n+n-1-j);
}
}
}
void main()
{
int i,j,n,*p;
printf("Enter n:");
scanf("%d",&n);
p=malloc(2*n*n);
if(n%2!=0)
hf1(n,p);
else if(n%4!=0)
hf2(n,p);
else
hf3(n,p);
for(i=0;i 收起