题目:输入一个矩阵,按照从里到外以顺时针的顺序依次打印出每一个数字。例如:
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 Print(int **a,int M,int N)//a 矩阵,M行N列
{
if(a==NULL||M<=0||N<=0)
return;
int start=0;//开始的位置,每次都是从左上角开始。
while(M>start*2&&N>start*2)//循环继续的条件。 每次while判断打印一圈
{
PrintCircle(a,M,N,start);
++start;
}
}
void PrintCircle(int** numbers, int columns, int rows, int start)
{
int endX = columns - 1 - start;
int endY = rows - 1 - start;
// 从左到右打印一行
for(int i = start; i <= endX; ++i)
{
int number = numbers[start][i];
printNumber(number);
}
// 从上到下打印一列
if(start < endY)
{
for(int i = start + 1; i <= endY; ++i)
{
int number = numbers[i][endX];
printNumber(number);
}
}
// 从右到左打印一行
if(start < endX && start < endY)
{
for(int i = endX - 1; i >= start; --i)
{
int number = numbers[endY][i];
printNumber(number);
}
}
// 从下到上打印一行
if(start < endX && start < endY - 1)
{
for(int i = endY - 1; i >= start + 1; --i)
{
int number = numbers[i][start];
printNumber(number);
}
}
}
void printNumber(int number)
{
printf("%d\t", number);
}