题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
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。
#include <iostream>
using namespace std;
void PrintMatrixInCircle(int** numbers, int columns, int rows, int begin);
void printMatrix(int **m_Matrix,int row,int col)
{
if (m_Matrix==nullptr||row<=0||col<=0)
{
return;
}
int begin=0;
while (col>begin*2&&row>begin*2)
{
PrintMatrixInCircle(m_Matrix, col, row, begin);
++begin;
}
}
void PrintMatrixInCircle(int** numbers, int columns, int rows, int begin)
{
int endX = columns - 1 - begin;
int endY = rows - 1 - begin;
// 从左到右打印一行
for(int i = begin; i <= endX; ++i)
{
int number = numbers[begin][i];
cout<<number<<endl;
}
// 从上到下打印一列
if(begin < endY)
{
for(int i = begin + 1; i <= endY; ++i)
{
int number = numbers[i][endX];
cout<<number<<endl;
}
}
// 从右到左打印一行
if(begin < endX && begin < endY)
{
for(int i = endX - 1; i >= begin; --i)
{
int number = numbers[endY][i];
cout<<number<<endl;
}
}
// 从下到上打印一行
if(begin < endX && begin < endY - 1)
{
for(int i = endY - 1; i >= begin + 1; --i)
{
int number = numbers[i][begin];
cout<<number<<endl;
}
}
}
int main()
{
int rows=5;
int columns=5;
int** numbers = new int*[rows];
for(int i = 0; i < rows; ++i)
{
numbers[i] = new int[columns];
for(int j = 0; j < columns; ++j)
{
numbers[i][j] = i * columns + j + 1;
}
}
printMatrix(numbers, columns, rows);
return 0;
}