2 条题解

  • 4
    @ 2023-7-2 18:05:01

    算法思路:

    1. 首先,我们定义一个二维数组A来表示原始矩阵,以及一个二维数组AT来表示转置矩阵。
    2. 接下来,我们通过两层循环遍历原始矩阵A的每个元素,并将其赋值给转置矩阵AT对应位置的元素。具体而言,外层循环控制行数,内层循环控制列数。
    3. 最后,我们再次使用两层循环输出转置矩阵AT,即可得到矩阵A的转置。

    时间复杂度分析:

    假设矩阵A的行数为n,列数为m,则构建转置矩阵AT的时间复杂度为O(nm),输出转置矩阵AT的时间复杂度也是O(nm)。因此,算法的总时间复杂度为O(n*m)。

    空间复杂度分析:

    除了矩阵A和转置矩阵AT所占用的空间外,算法的额外空间复杂度为O(1),即常数级别的空间复杂度。

    解析:

    该算法通过构建一个新的二维数组来存储转置矩阵,从而实现了矩阵转置的功能。转置矩阵的第i行第j列元素等于原始矩阵的第j行第i列元素。通过遍历原始矩阵A,并将每个元素赋值给转置矩阵AT对应位置的元素,即可得到矩阵A的转置。最后,通过输出转置矩阵AT来展示结果。

    #include <iostream>
    using namespace std;
    
    const int MAXN = 100;
    const int MAXM = 100;
    
    int main() {
        int n, m;
        cin >> n >> m;
        
        int A[MAXN][MAXM];
        int AT[MAXM][MAXN];
        
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                cin >> A[i][j];
            }
        }
        
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                AT[i][j] = A[j][i];
            }
        }
        
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                cout << AT[i][j] << " ";
            }
            cout << endl;
        }
        
        return 0;
    }
    
    • 3
      @ 2023-7-17 15:47:35
      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
          int n, m, a[105][105];
          cin >> n >> m;
          for (int i = 1; i <= n; i++)
              for (int j = 1; j <= m; j++)
                  cin >> a[i][j];
          for (int j = 1; j <= m; j++)
          {
              for (int i = 1; i <= n; i++)
                  cout << a[i][j] << " ";
              cout << endl;
          }
      }
      
      • 1

      信息

      ID
      208
      时间
      1000ms
      内存
      128MiB
      难度
      1
      标签
      递交数
      75
      已通过
      56
      上传者