来自:http://blog.youkuaiyun.com/v_july_v/article/details/6234496
38、顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。
分析:包括Autodesk、EMC在内的多家公司在面试或者笔试里采用过这道题。
/*
顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。
分析:包括Autodesk、EMC在内的多家公司在面试或者笔试里采用过这道题。
*/
#include <iostream>
using namespace std;
void printMatrix(int(*arr)[6],int beg_row,int end_row ,int beg_lie,int end_lie)
{
end_row--;
end_lie--;
int count=0;
int num=1;
while ( beg_row<end_row && beg_lie<end_lie ){
switch (count){
case 0:{
for ( int i=beg_lie ; i<=end_lie ;++i ){
cout<<arr[beg_row][i]<<" ";
num++;
if ( num%5==0 ){
cout<<endl;
}
}
beg_row++;
break;
}
case 1:{
for ( int i=beg_row ; i<=end_row ; ++i){
cout<<arr[i][end_lie]<<" ";
num++;
if ( num%5==0 ){
cout<<endl;
}
}
end_lie--;
break;
}
case 2:{
for ( int i=end_lie ; i>=beg_lie ; --i ){
cout<<arr[end_row][i]<<" ";
num++;
if ( num%5==0 ){
cout<<endl;
}
}
end_row--;
break;
}
case 3:{
for ( int i=end_row ; i>=beg_row ; --i ){
cout<<arr[i][beg_lie]<<" ";
num++;
if ( num%5==0 ){
cout<<endl;
}
}
beg_lie++;
break;
}
}
count=(count+1)%4;
}
}
int main()
{
int a[5][6]={
{ 19,2,3,4,5,6},
{ 2,3,14,5,6,7},
{ 3,14,5,6,7,8},
{ 4,5,16,7,8,9},
{ 51,6,7,8,9,10}
};
for ( int i=0 ; i<5 ; ++i ){
for ( int j=0 ; j<6 ; ++j ){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
printMatrix(a,0,5,0,6);
return 0;
}