題目:輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字。例如,如果輸入如下矩陣:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
則依次打印出數字1、2、3、4、8、12、16、15、12、13、9、5、6、7、11、10。
//順時針打印矩陣
void PrintMatrixClockwisely(int **numbers, int columns, int rows)
{
if (numbers==NULL||columns<=0||rows<=0)
return;
//開始位置標示,每圈開始坐標為(start,start)
int start=0;
while(columns>2*start&&rows>2*start)
{
//從(start,start)開始,順時針打印一圈
PrintMatrixInCircle(numbers,columns,rows,start);
start++;
}
}
//順時針打印一圈
void PrintMatrixInCircle(int **numbers, int columns, int rows, int start)
{
int i;
int endX=columns-1-start;
int endY=rows-1-start;
//從左到右打印一行
for (i=start; i<=endX; i++)
{
printf("%d\t",numbers[start][i]);
}
if (start<endY)
{
//從上到下打印一列
for (i=start+1; i<=endY; i++)
{
printf("%d\t",numbers[i][endX]);
}
}
if (start<endX&&start<endY)
{
//從右到左打印一行
for (i=endX-1; i>=start; i--)
{
printf("%d\t",numbers[endY][i]);
}
}
if (start<endX&&start<endY-1)
{
//從下到上打印一列
for (i=endY-1; i>start; i--)
{
printf("%d\t",numbers[i][start]);
}
}
}