对,先要了解算法最好给你个吧,不过是有限阶的(用vc做的)#include<stdio.h>voidmain(){inti,j,n,k,u,t,m,x,y,a[100][100];printf("pleaseinputn:");scanf("%d",&n);printf("\n");if(n>2&&(n%2)!=0){for(i=0;i<n;i++)for(j=0;j<n;j++)a[i][j]=0;j=(n-1)/2;i=0;a[i][j]=1;for(k=2;k<=n*n;k++){i-=1;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){i+=2;j-=1;a[i][j]=k;}elsea[i][j]=k;}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%-4d",a[i][j]);printf("\n");}}elseif(n>2&&(n%4)==2){for(i=0;i<n;i++)for(j=0;j<n;j++)a[i][j]=0;m=(n-2)/4;//n=4m+2;u=n/2;//u为子矩阵行数或列数t=(n+2)/4;//t为A的中间行j=t-1;i=0;a[i][j]=1;for(k=2;k<=u*u;k++){i-=1;j+=1;if(i<0&&j>u-1){i=i+2;j=j-1;}else{if(i<0)i=u-1;if(j>u-1)j=0;}if(a[i][j]!=0){i+=2;j-=1;a[i][j]=k;}elsea[i][j]=k;}j=t-1+u;i=u;a[i][j]=1+u*u;for(k=u*u+2;k<=2*u*u;k++){i-=1;j+=1;if(i<u&&j>u-1+u){i=i+2;j=j-1;}else{if(i<u)i=u-1+u;if(j>u-1+u)j=u;}if(a[i][j]!=0){i+=2;j-=1;a[i][j]=k;}elsea[i][j]=k;}j=t-1+u;i=0;a[i][j]=1+2*u*u;for(k=2*u*u+2;k<=3*u*u;k++){i-=1;j+=1;if(i<0&&j>u-1+u){i=i+2;j=j-1;}else{if(i<0)i=u-1;if(j>u-1+u)j=u;}if(a[i][j]!=0){i+=2;j-=1;a[i][j]=k;}elsea[i][j]=k;}j=t-1;i=u;a[i][j]=1+3*u*u;for(k=3*u*u+2;k<=4*u*u;k++){i-=1;j+=1;if(i<u&&j>u-1){i=i+2;j=j-1;}else{if(i<u)i=u-1+u;if(j>u-1)j=0;}if(a[i][j]!=0){i+=2;j-=1;a[i][j]=k;}elsea[i][j]=k;}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%-4d",a[i][j]);printf("\n");}printf("\n");for(i=0;i<u;i++)for(j=0;j<m;j++)if(i!=t-1){y=a[i][j];a[i][j]=a[i+u][j];a[i+u][j]=y;}x=t-1;for(j=0;j<m;j++){y=a[t-1][x];a[t-1][x]=a[t-1+u][x];a[t-1+u][x]=y;x++;}for(j=n-1;j>n-1-(m-1);j--)for(i=0;i<u;i++){y=a[i][j];a[i][j]=a[i+u][j];a[i+u][j]=y;}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%-4d",a[i][j]);printf("\n");}}elseif(n>2&&n%4==0){k=1;for(i=0;i<n;i++)for(j=0;j<n;j++){a[i][j]=k;k++;}x=n-1;for(j=0;j<n/2;j++,x--){for(i=0;i<n;i++)if(i%4!=j%4&&(i+j)%4!=3){t=a[i][j];a[i][j]=a[i][x];a[i][x]=t;}}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%-4d",a[i][j]);printf("\n");}printf("\n");x=n-1;for(i=0;i<n/2;i++,x--){for(j=0;j<n;j++)if(i%4!=j%4&&(i+j)%4!=3){t=a[i][j];a[i][j]=a[x][j];a[x][j]=t;}}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%-4d",a[i][j]);printf("\n");}}elseprintf("输入错误\n");system("pause...");}
阅读全文 >