/*先把数据依照打印格式打印到二维数组中,然后输出二维数组就可以
*时间复杂度 O(N*M)
*空间复杂度O(N*M)
*/
#include<stdio.h> #include<string.h> #include<stdlib.h> int input(void); void contral(int **arry,int col,int row); void set_value(int**a,int col,int row, int start); void print(int **arry,int col,int row); int main(void) { int col,row; int **a; int i; printf("input the col,row:"); scanf("%d%d",&col,&row); //申请二维数组 a=(int **)malloc(sizeof(int*)*col); for(i=0;i<col;i++) a[i]=(int *)malloc(sizeof(int)*row); contral(a,col,row); print(a,col,row); return 0; } void contral(int **arry,int col,int row) { int start=0; while(col>start*2&&row>start*2) { set_value(arry,col,row,start); start++; } } void set_value(int**a,int col,int row, int start) { int endX=row-1-start; int endY=col-1-start; int i; static int temp=1; //第一行,从右到左 for(i=start;i<=endX;i++) { a[start][i]=temp; temp++; } //第二列,从上到下 if(start<endY) { for(i=start+1;i<endY;i++) { a[i][endX]=temp; temp++; } } //打印第三行 从左到右 if(start<endX&&start<endY) { for(i=endX;i>=start;i--) { a[endY][i]=temp; temp++; } } //打印第四列,从下到上 if(start<endX&&start<endY-1) { for(i=endY-1;i>=start+1;i--) { a[i][start]=temp; temp++; } } } void print(int **arry,int col,int row) { int i,j; for(i=0;i<col;i++) { for(j=0;j<row;j++) { printf("%4d ",arry[i][j]); } printf(" "); } }程序执行结果:
[trageday@lei-yum code_test]$ gcc -o print_cir_arry print_cir_arry.c [trageday@lei-yum code_test]$ ./print_cir_arry input the col,row:5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9