您的位置:首页 > 职场人生

面试题20 顺时针打印矩阵

2014-09-12 15:50 295 查看




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





[cpp] view
plaincopy

#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
[nStart] << " ";

}

}

}

//顺时针打印矩阵,行数为rows,列数为columns

void 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;

}

运行结果:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: