面试题20:顺时针打印矩阵

来源:互联网 发布:北京服装定制 知乎 编辑:程序博客网 时间:2024/05/16 15:08
1.输入一个矩阵,按照从外到里以顺时针的顺序打印出每一个数字。

例如:


分析:
分析循环打印的规律可以发现,每次打印都是往矩阵的内部缩小了一周,这样的话可以可以用两个坐标点来确定这样一个矩形的左上角顶点和右下角顶点,然后依据两个点确定的范围来打印,按照从左到右,从上到下,从右到左,从下到上的顺序打印。

源码:

/**/#include<iostream>using namespace std;//确定打印的矩形框void PrintStart(int**a, int row,int col);//按照四种顺序依次打印void PrintCircle(int** a, int start,int endX,int endY);int main(){int** numbers = new int*[4];cout<<"the original matrix :"<<endl;    for(int i = 0; i < 4; ++i)    {        numbers[i] = new int[4];        for(int j = 0; j < 4; ++j)        {            numbers[i][j] = i * 4 + j + 1;printf("%3d  ",numbers[i][j]);        }cout<<endl;    }cout<<"the output is : "<<endl;PrintStart(numbers,4,4);system("PAUSE");return 0;}void PrintStart(int** a, int row,int col){int start=0;//左上角位置int endX=row-1;//右上角位置int endY=col-1;while(start<=endX&&start<=endY)//逐步缩小范围{PrintCircle(a, start,endX,endY);start++;endX--;endY--;}cout<<endl;}void PrintCircle(int** a, int start,int endX,int endY){//从左往右打印for(int i=start;i<endY;i++)//行末尾少打印一个,以免重复{cout<<a[start][i]<<"  ";}//从上到下打印for(int i=start;i<endX;i++){cout<<a[i][endY]<<"  ";}//从右往左打印for(int i=endY;i>start;i--){cout<<a[endX][i]<<"  ";}//从下往上打印for(int i=endX;i>start;i--){cout<<a[i][start]<<"  ";}}

结果:


0 0
原创粉丝点击