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

来源:互联网 发布:主题医院 mac 编辑:程序博客网 时间:2024/06/08 14:37

分析:把矩阵想象成若干个圈,用一个循环打印矩阵,每次打印矩阵的一个圈



#include "stdafx.h"#include <iostream>using namespace std;void PrintMatrixIncircle(int **nArr, int rows, int columns, int nStart){int nEndX = columns - 1 -nStart;int nEndY = rows - 1 -nStart;//从左到右打印一行for (int i=nStart; i<=nEndX; i++){cout << nArr[nStart][i] << " ";}//从上到下打印一列if (nEndY > nStart){for (int j=nStart+1; j<=nEndY; j++){cout << nArr[j][nEndX] << " ";}}//从右到左打印一行if (nEndY > nStart && nEndX > nStart){for (int t=nEndX-1; t>=nStart; t--){cout << nArr[nEndY][t] << " ";}}//从下到上打印一列if (nEndY -1 > nStart && nEndX > nStart){for (int n=nEndY-1; n>=nStart+1; n--){cout << nArr[n][nStart] << " ";}}}//顺时针打印矩阵,行数为rows,列数为columnsvoid PrintMatrixClockWisely(int **nArr, int rows, int columns){   if (nArr == NULL || rows <= 0 || columns <= 0)   {   return;   }   int nStart = 0;   while (rows>(nStart*2) && columns>(nStart*2))      {   PrintMatrixIncircle(nArr, rows, columns, nStart);   nStart++;   }}int _tmain(int argc, _TCHAR* argv[]){int nMatrix1[4][4] = {{1,2,3,4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 16}};int **pp1 = new int*[4];for (int i=0; i<4; i++){pp1[i] = nMatrix1[i];}PrintMatrixClockWisely(pp1, 4, 4);cout << endl;int nMatrix2[1][4] = {{1,2,3,4}};int **pp2 = new int*[1];for (int i=0; i<1; i++){pp2[i] = nMatrix2[i];}PrintMatrixClockWisely(pp2, 1, 4);cout << endl;int nMatrix3[4][1] = {{1},{2},{3},{4}};int **pp3 = new int*[4];for (int i=0; i<4; i++){pp3[i] = nMatrix3[i];}PrintMatrixClockWisely(pp3, 4, 1);cout << endl;int nMatrix4[2][5] = {1,2,3,4,5,6,7,8,9,10};int **pp4 = new int*[2];for (int i=0; i<2; i++){pp4[i] = nMatrix4[i];}PrintMatrixClockWisely(pp4, 2, 5);cout << endl;system("pause");return 0;}

运行结果:





原创粉丝点击