/*先把数据按照打印格式打印到二维数组中,然后输出二维数组即可
*时间复杂度 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