现在的位置: 首页 > 综合 > 正文

第四十四题 顺时针打印矩阵

2017年12月25日 ⁄ 综合 ⁄ 共 1304字 ⁄ 字号 评论关闭

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

例如:如果输入如下矩阵:

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

抱歉!评论已关闭.