/* 实现效果: 1 2 6 7 15 3 5 8 14 16 4 9 13 17 22 10 12 18 21 23 11 19 20 24 25 */ #include #define N 5 //阶数,即N*N的螺旋矩阵 void main() { int i, j, num=1, a[N][N]; for(i=0; i<=N/2; i++) { for(j=i; ji; j--) a[N-i-1][j]=n++; for(j=N-i-1; j>i; j--) a[j][i]=n++; } for(i=0; i main() { int n,m,i,j,t,k=1; int a[11][11]; clrscr(); do{ printf("please input a number(1-10):"); scanf("%d",&n); }while(n<1||n>10); t=n+1; for(m=1;m<=t/2;m++) { for(i=m;i<=t-m;i++) {a[i][m]=k;k++;} for(j=m+1;j<=t-m;j++) {a[i-1][j]=k;k++;} for(i=n-m;i>=m;i--) {a[i][j-1]=k;k++;} for(j=n-m;j>=m+1;j--) {a[i+1][j]=k;k++;} } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(a[i][j]<=9) printf("0%d ",a[i][j]); else printf("%d ",a[i][j]); } printf("\n"); } getch(); } 就是这样的。 可以更简洁些: #include main() { int n,m,i,j,t,k=1; int a[11][11]; clrscr(); do{ printf("please input a number(1-10):"); scanf("%d",&n); }while(n<1||n>10); t=n+1; for(m=1;m<=t/2;m++) { for(i=m;i<=t-m;i++) a[i][m]=k++; for(j=m+1;j<=t-m;j++) a[i-1][j]=k++; for(i=n-m;i>=m;i--) a[i][j-1]=k++; for(j=n-m;j>=m+1;j--) a[i+1][j]=k++; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(a[i][j]<=9) printf("0%d ",a[i][j]); else printf("%d ",a[i][j]); } printf("\n"); } getch(); }  #include #define N 8 main(){ int i,j,n=1,a[N][N]; for(i=0;i<=N/2;i++){ for(j=i;ji;j--) a[N-i-1][j]=n++; for(j=N-i-1;j>i;j--) a[j][i]=n++; } for(i=0;i #define N 5 void main(){ int x,y; void horse(int i,int j); printf("Please input start position:"); scanf("%d%d",&x,&y); horse(x-1,y-1); } void horse(int i,int j){ int a[N][N]={0},start=0, h[]={1,2,2,1,-1,-2,-2,-1}, v[]={2,1,-1,-2,2,1,-1,-2}, save[N*N]={0},posnum=0,ti,tj,count=0; int jump(int i,int j,int a[N][N]); void outplan(int a[N][N]); a[i][j]=posnum+1; while(posnum>=0){ ti=i;tj=j; for(start=save[posnum];start<8;++start){ ti+=h[start];tj+=v[start]; if(jump(ti,tj,a)) break; ti-=h[start];tj-=v[start]; } if(start<8){ save[posnum]=start; a[ti][tj]=++posnum+1; i=ti;j=tj;save[posnum]=0; if(posnum==N*N-1){ //outplan(a); count++; } } else{ a[i][j]=0; posnum--; i-=h[save[posnum>;j-=v[save[posnum>; save[posnum]++; } } printf("%5d",count); } int jump(int i,int j,int a[N][N]){ if(i=0&&j=0&&a[i][j]==0) return 1; return 0; } void outplan(int a[N][N]){ int i,j; for(i=0;i