二维数组环形打印,亲自调试

来源:互联网 发布:淘宝情趣女模特都有谁 编辑:程序博客网 时间:2024/06/05 23:08

/*先把数据按照打印格式打印到二维数组中,然后输出二维数组即可

 *时间复杂度 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("\n");   }}
程序运行结果:

[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 



1 1
原创粉丝点击