螺旋矩阵

来源:互联网 发布:计算机二级c语言怎么考 编辑:程序博客网 时间:2024/04/29 19:50

运行结果:






#include<stdio.h>#include<stdlib.h>#include<math.h>int ii,jj,k,n,r;int a[20][20]={0};int fun(int y){int i=0;if(n<1&&r%2==0){a[ii][jj]=1;return 0;}elseif(n<1&&r%2!=0)return 0;if(k==0)while(i<n){a[ii][jj++]=y--;i++;}elseif(k==1)while(i<n){a[ii++][jj]=y--;i++;}elseif(k==2)while(i<n){a[ii][jj--]=y--;i++;}elseif(k==3)while(i<n){a[ii--][jj]=y--;i++;}k=k++;if(k==4){k=0;n-=2;ii++;jj++;}fun(y);return 0;}void print(int x){int i,j;for(i=0;i<=r;i++){for(j=0;j<=r;j++){if(a[i][j]<=x)printf("%4d",a[i][j]);elseprintf("    ");}putchar('\n');}}void main(){int x,y;ii=jj=k=0;scanf("%d",&x);/* 最大不能超过400,TC中最好小于361 */r=n=(int)ceil(sqrt((double)x))-1;y=(n+1)*(n+1);fun(y);print(x);getch();}

另一个算法:

运行结果:



 #include<stdio.h> void main(){int t=0,n,i,j,k,l1,l0,c1,c0;int aa[20][20];printf("请输入n阶方阵的阶数n:");scanf("%d",&n);i=l0=0,l1=n-1,j=c0=0,c1=n-1; /*l0,l1分别表示左右边界,c0,c1分别表示上下边界*/k=1;for(k=1;k<=n*n;k++){aa[i][j]=k;switch(t){case 0:        /*t=0表示方阵的旋转方向为从左到右*/j++;if (j>l1)     /*判断是否已超出右边界*/{j--;i++;t++;c0++;}/*改变行列及t和左边界的值*/break;case 1:       /*t=1表示方阵的旋转方向为从上到下*/i++;if (i>c1)    /*判断是否已超出下边界*/   {i--;j--;t++;l1--;}break;case 2:       /*t=2表示方阵的旋转方向为从右到左*/j--;if (j<l0)  /*判断是否已超出左边界*/ {j++;i--;t++;c1--;}break;case 3:       /*t=3表示方阵的旋转方向为从下到上*/i--;if (i<c0)  /*判断是否已超出上边界*/{i++;j++;t=0;l0++;}break;}}printf("所得的方阵是:\n");for(i=0;i<n;i++){for (j=0;j<n;j++)printf("%5d",aa[i][j]); printf("\n");}getch();}



原创粉丝点击