[C语言]顺时针打印矩阵

99 阅读1分钟

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

题目描述:输入一个矩阵,从外向里顺时针打印矩阵内数字。

输入:矩阵数组(int**)、长(int)、宽(int)

剑指20_1.png

剑指20_2.png

解题思路: 考虑三个参数的特殊情况; 打印一周; 从外向内; 结束条件;

代码实现:

void printNumber(int number) {
    printf("%d\n", number);
}

void printMatrixInCircle(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);
    }

    for (int i = start; i < endY; i++) {
        int number = numbers[endX][i];
        printNumber(number);
    }

    for (int i = endX; i >= start; i++) {
        int number = numbers[i][endY];
        printNumber(number);
    }

    for (int i = endY; i >= start; i++) {
        int number = numbers[start][i];
        printNumber(number);
    }
}

void printMatrixClockWisely(int **numbers, int columns, int rows) {

    if (numbers == NULL || columns <= 0 || rows <= 0) {
        return;
    }
    int start = 0;
    while (columns > start * 2 && rows > start * 2) {
        printMatrixInCircle(numbers, columns, rows, start);
        start++;
    }
}