题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
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; }