给水平方向和垂直方向各设置两个坐标,x_start, x_end, y_start, y_end, 分别表示当前水平方向输出区间应该在x_start和x_end之间,垂直方向输出区间在y_start和y_end直接,每次转弯的时候只需要改变区间的边界,如下:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int a[][6]={{1, 2, 3, 4, 5, 6},
{7, 8, 9, 10,11,12},
{13,14,15,16,17,18},
{19,20,21,22,23,24},
{25,26,27,28,29,30},
};
int x_start=0,x_end=0;
int y_start=0,y_end=0;
int i=0,j;
x_end=sizeof(a[0])/4-1; /*6*/
y_end=sizeof(a)/(sizeof(a[0]))-1;
printf("x=%d,y=%d\n",x_end,y_end);
for (i=0;i<=y_end;i++)
{
for(j=0;j<=x_end;j++)
{
printf("%d ",a[i][j]);
}
printf("\n\n");
}
while(x_start<=x_end && y_start <=y_end) {
for(i=x_start;i<= x_end; i++)
{
printf("%d ",a[y_start][i]);
}
y_start++;
printf("\n");
for(i=y_start;i<= y_end; i++)
{
printf("%d ",a[i][x_end]);
}
x_end--;
printf("\n");
for(i=x_end;i>= x_start; i--)
{
printf("%d ",a[y_end][i]);
}
y_end--;
printf("\n");
for(i=y_end;i >= y_start; i--)
{
printf("%d ",a[i][x_start]);
}
x_start++;
printf("\n");
}
return 0;
}
输出: