题目

从标准输入读入一个 m×n 的二维整数矩阵,计算其转置矩阵(将原矩阵的行与列互换,生成 n×m 矩阵)并按标准格式输出。

输入格式:第一行输入原矩阵的行数 m 和列数 n;随后 m 行每行输入 n 个整数。

输出格式:输出转置后的 n×m 矩阵,共 n 行,每行包含 m 个整数,以空格分隔。

数据范围与约定:1 ≤ m, n ≤ 20。

思路与算法

1. 矩阵转置坐标变换
转置操作的几何本质是关于主对角线翻转,元素对应关系为:b[j][i] = a[i][j]。

2. 维度的逆置
原矩阵尺寸为 m 行 n 列,转置后新矩阵必须以 n 行 m 列进行外层与内层的双重循环遍历输出。

完整程序

#include <stdio.h>

int main(void)
{
    int m, n, a[10][10], b[10][10];
    if (scanf("%d %d", &m, &n) != 2) {
        return 1;
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    // 矩阵转置:原行下标变列下标,原列下标变行下标,即 b[j][i] = a[i][j]
    // 原 m 行 n 列转置后变为 n 行 m 列
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            b[j][i] = a[i][j];
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d%c", b[i][j], j + 1 < m ? ' ' : '\n');
        }
    }
    return 0;
}

运行示例

输入:

2 3
1 2 3
4 5 6

输出:

1 4
2 5
3 6