n阶魔方阵c源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define N 12 //N大于或等于三
void uneven()//N为奇数
{
int A[N][N]={0},B[N*N+1],x=0,y=N/2,a,b,n;
for (n=1;n<=N*N;n++)
B[n]=n;
A[x][y]=B[1];
for (n=2;n<=N*N;n++)
{
a=x;
b=y;
x-=1;
y+=1;
if (x==-1) x=N-1;
if (y==N) y=0;
if (A[x][y]!=0) {x=a+1;y=b;}
if (x==N ) x=0;
A[x][y]=B[n];
}
for (x=0;x { for (y=0;y { printf("%3d ",A[x][y]); } printf("\n\n"); } } void even()//N为偶数,且能被四整除 { int a[N][N],n=1,i,j,x=1,y=1; for (i=0;i for (j=0;j { a[i][j]=n; n++; } for (i=0;i { for (j=0;j { switch (y) { case 1: case 4:if (x==1 || x==4) a[i][j]=N*N-a[i][j]+1;break; case 2: case 3:if (x==2 || x==3) a[i][j]=N*N-a[i][j]+1;break; default:break; } x++; if (x==5) x=1; } y++; if (y==5) y=1; } for (i=0;i { for (j=0;j printf("%3d ",a[i][j]); printf("\n\n"); } } void evens()//N为偶数,且不能被四整除 { int a[N][N],i[N/2][N/2]={0},j[N/2][N/2]={0},m[N/2][N/2]={0},n[N/2][N/2]={0}; int b,d,k,x,y,z; x=0;y=N/4; i[x][y]=1; for (z=2;z<=N*N/4;z++) { d=x; b=y; x-=1; y+=1; if (x==-1) x=N/2-1; if (y==N/2) y=0; if (i[x][y]!=0) {x=d+1;y=b;} if (x==N/2 ) x=0; i[x][y]=z; } x=0;y=N/4; j[x][y]=N*N/2+1; for (z=2;z<=N*N/4;z++) { d=x; b=y; x-=1; y+=1; if (x==-1) x=N/2-1; if (y==N/2) y=0; if (j[x][y]!=0) {x=d+1;y=b;} if (x==N/2 ) x=0; j[x][y]=z+N*N/2; } x=0;y=N/4; m[x][y]=N*N*3/4+1; for (z=2;z<=N*N/4;z++) { d=x; b=y; x-=1; y+=1; if (x==-1) x=N/2-1; if (y==N/2) y=0; if (m[x][y]!=0) {x=d+1;y=b;} if (x==N/2 ) x=0; m[x][y]=z+N*N*3/4; } x=0;y=N/4; n[x][y]=N*N/4+1; for (z=2;z<=N*N/4;z++) { d=x; b=y; x-=1; y+=1; if (x==-1) x=N/2-1; if (y==N/2) y=0; if (n[x][y]!=0) {x=d+1;y=b;} if (x==N/2 ) x=0; n[x][y]=z+N*N/4; } k=(N-2)/4; for (y=N/4,b=0;b z=i[N/4][y]; i[N/4][y]=m[N/4][y]; m[N/4][y]=z; } for (x=0;x for (y=0;y { if (x==N/4) continue; z=i[x][y]; i[x][y]=m[x][y]; m[x][y]=z; } for (y=N/4,b=0;b for (x=0;x { z=j[x][y]; j[x][y]=n[x][y]; n[x][y]=z; } for (x=0;x for (y=0;y a[x][y]=i[x][y]; for (x=0;x for (y=N/2;y a[x][y]=j[x][y-N/2]; for (x=N/2;x for (y=0;y a[x][y]=m[x-N/2][y]; for (x=N/2;x for (y=N/2;y a[x][y]=n[x-N/2][y-N/2]; for (x=0;x