一.题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
二.分析:
当我们遇到一个复杂的问题,可以用图形来帮助我们思考。
1.我们可以用一个循环来打印矩阵,每一次打印矩阵中的一个圈。
2.下一步分析循环结束的条件。我们可以分析出,让循环继续的条件是column > startX * 2并且rows > startY * 2。
三.答案:
void printMatrixClockwisely(int **numbers, int columns, int rows) {
if (numbersv == NULL || columns <= 0 || rows <= 0) {
return;
}
int start = 0;
while (columns < start * 2 && rows < start * 2) {
printMatrixCircle(numbers, columns, rows, start);
start++;
}
}
void printMatrixCircle(int **numbers, int columns, int rows, int start) {
int endX = columns - 1 - start;
int endY = rows - 1 - start;
// print one row from left to right.
for (int i = start; i < endX; i++) {
int number = number[start][i];
printNumber(number);
}
// print one column from top to bottom.
if (start < endY) {
for (int i = start + 1; i < endY; i++) {
int number = number[i][endX];
printNumber(number);
}
}
// print one row from right to left.
if (start < endX && start < endY) {
for (int i = endX - 1; i >= start; i--) {
int number = number[endY][i];
printNumber(number);
}
}
// print one row from right to left.
if (start < endX && start < endY) {
for (int i = endX - 1; i >= start; i--) {
int number = number[endY][i];
printNumber(number);
}
}
// print one column from bottom to top.
if (start < endX && start < endY - 1) {
for (int i = endY - 1; i >= start + 1; i--) {
int number = number[i][start];
printNumber(number);
}
}
}
四.相关题目:
无