C++长方形数字矩阵问题

输入一个长方形的数字矩阵,将他的两个对角线的值乘十输出。
样例输入:
1 2 3
4 5 6
7 8 9
2 1 3
样例输出:
10 2 30
4 100 6
7 160 9
20 1 30
求解

对角线乘,长宽不一样的时候,重复的点相当于是乘20?
分析样例数据,矩阵长宽不一样时,对角线是一条非45度斜线,且部分点在两条线上都存在。按以上规则,采用递归的方式计算:

#include <stdio.h>

#define MAX_ROWS 100
#define MAX_COLS 100

void multiplyOne(int matrix[MAX_ROWS][MAX_COLS], int matrixFlag[MAX_ROWS][MAX_COLS], int row, int col) {
    if (matrixFlag[row][col] == 0) {
        matrix[row][col] *= 10;
        matrixFlag[row][col] = 1;
    } else if (matrixFlag[row][col] == 1) {
        matrix[row][col] *= 2;
        matrixFlag[row][col] = 2;
    }
}

// 对角线数字乘以10
void multiplyDiagonals(int matrix[MAX_ROWS][MAX_COLS], int matrixFlag[MAX_ROWS][MAX_COLS], int rows, int cols, int rowOffset, int colOffset) {
    if (rows == 1 || cols == 1) {
        // 非长方形矩阵
        return;
    }

    int i, j;
    //printf("rows=%d, cols=%d, rowOffset=%d, colOffset=%d\n", rows, cols, rowOffset, colOffset);

    // 处理4个角
    multiplyOne(matrix, matrixFlag, rowOffset, colOffset);
    multiplyOne(matrix, matrixFlag, rowOffset, cols - 1);
    multiplyOne(matrix, matrixFlag, rows - 1, colOffset);
    multiplyOne(matrix, matrixFlag, rows - 1, cols - 1);

    // 递归终止条件
    if (rows == cols && rows - rowOffset == 2) {
        return;
    } else {
        if (rows - rowOffset == 1 || cols - colOffset == 1) {
            // 处理左上到右下对角
            for (i = rowOffset; i < rows; i++) {
                for (j = colOffset; j < cols; j++) {
                    multiplyOne(matrix, matrixFlag, i, j);
                }
            }
            // 处理右上到左下对角
            for (i = rows - 1; i >= rowOffset; i--) {
                for (j = cols - 1; j >= colOffset; j--) {
                    multiplyOne(matrix, matrixFlag, i, j);
                }
            }
            return;
        }
    }

    // 处理剩余部分
    if (rows - rowOffset > 2) {
        rows--;
        rowOffset++;
    }
    if (cols - colOffset > 2) {
        cols--;
        colOffset++;
    }
    multiplyDiagonals(matrix, matrixFlag, rows, cols, rowOffset, colOffset);

}

void printMatrix(int matrix[MAX_ROWS][MAX_COLS], int rows, int cols) {
    int i, j;

    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int matrix[MAX_ROWS][MAX_COLS], matrixFlag[MAX_ROWS][MAX_COLS];
    int rows, cols;
    int i, j;

    printf("请输入矩阵的行数和列数(用空格分隔):");
    scanf("%d %d", &rows, &cols);

    printf("请输入矩阵的元素(按行输入,每个元素用空格分隔):\n");
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            scanf("%d", &matrix[i][j]);
            matrixFlag[i][j] = 0;
        }
    }

    multiplyDiagonals(matrix, matrixFlag, rows, cols, 0, 0);

    printf("输出结果:\n");
    printMatrix(matrix, rows, cols);

    return 0;
}

4行3列对角?