笔试题解法
求一个笔试题解法
问题描述:螺旋式打印一个二维数组。如
1 16 3 2 17
8 6 4 3 23
2 5 7 8 12
21 2 4 6 13
要求打印后顺序为:1 16 3 2 17 23 12 13 6 4 2 21 2 8 6 4 3 8 7 5
------解决方案--------------------
------解决方案--------------------
算法很简单啊
打印一行, 起点行加1
打印最末一列, 结尾列减1
反序打印最末一行, 末尾行减1
反序打印第一列, 起点列加1
循环
问题描述:螺旋式打印一个二维数组。如
1 16 3 2 17
8 6 4 3 23
2 5 7 8 12
21 2 4 6 13
要求打印后顺序为:1 16 3 2 17 23 12 13 6 4 2 21 2 8 6 4 3 8 7 5
------解决方案--------------------
- C/C++ code
#include <stdio.h>
void PrintRing( int arr[][5], int st_x, int st_y, int ed_x, int ed_y)
{
int i=st_x,j=st_y;
for( ; j <=ed_y; j++ )
{
printf("%d ",arr[i][j]);
}
for( --j,++i; i <=ed_x; i++ )
{
printf( "%d ",arr[i][j]);
}
for( --i,--j;j>=st_y; j-- )
{
printf( "%d ",arr[i][j]);
}
for( ++j,--i;i>=st_x+1; i-- )
{
printf( "%d ",arr[i][j]);
}
}
int main()
{
int arr[5][5]={{1, 16, 3, 2, 17 },
{8, 6, 4, 3, 23},
{2, 5, 7, 8, 12},
{21, 2, 4, 6, 13},
{11, 111, 1111, 132, 12}};
int span=5, height = 5;
int st_x=0, st_y=0;
int ed_x=span-1, ed_y=height-1;
int circleTimes = span>height?height:span;
if( circleTimes%2 ){ circleTimes+=1;}
circleTimes/=2;
for(int i=0; i <circleTimes; i++ )
{
PrintRing(arr,st_x,st_y,ed_x,ed_y);
st_x++;
st_y++;
ed_x--;
ed_y--;
}
}
------解决方案--------------------
算法很简单啊
打印一行, 起点行加1
打印最末一列, 结尾列减1
反序打印最末一行, 末尾行减1
反序打印第一列, 起点列加1
循环