返回列表 發帖

資料結構 102 二維陣列矩陣轉置運算(易)

TQC+ 程式設計:資料結構 102 二維陣列矩陣轉置運算
1. 題目說明:
請依下列題意進行作答,使輸出值符合題意要求。

2. 設計說明:
請撰寫一程式,首先要求使用者輸入矩陣的列數(m)與行數(n),代表要創建矩陣A有 m x n 個元素,接著依序輸入 m x n 個元素值(皆為整數),請計算A的轉置矩陣AT,並輸出兩個矩陣A與AT 。

提示:矩陣(Matrix)指的是外觀為 m x n 的二維資料,其中Aij 表示矩陣中第i列第j行的元素,而位置可表示成(i,j) 。

提示:矩陣A 的轉置(Transpose)是另一個矩陣AT,方法是將矩陣A中每個元素從位置(i,j)轉換到(j,i)。例如:


提示:輸出矩陣時,每列皆使用中括號([、])包覆,且整數間使用半形空白間隔。

3. 輸入輸出:
輸入說明
第 1 列:輸入矩陣的列數 m。
第 2 列:輸入矩陣的行數 n。
第 3~m*n+2 列:依序輸入矩陣元素(皆為整數)。

輸出說明
初始創建矩陣
轉置後矩陣
範例輸入1
2
3
1
2
3
4
5
6
範例輸出1
Original:
[1 2 3]
[4 5 6]
Transpose:
[1 4]
[2 5]
[3 6]
範例輸入2
3
3
-1
25
-5
33
100
-78
56
63
-99
範例輸出2
Original:
[-1 25 -5]
[33 100 -78]
[56 63 -99]
Transpose:
[-1 33 56]
[25 100 63]
[-5 -78 -99]
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊
May

  1. //#include <iostream>
  2. //#include <vector>
  3. #include <bits/stdc++.h>
  4. using namespace std;

  5. int main() {
  6.     // 讀取矩陣的列數與行數
  7.     int m, n;
  8.     cin >> m >> n;

  9.     // 建立原始矩陣 A
  10.     vector<vector<int>> A(m, vector<int>(n));

  11.     // 讀取矩陣元素
  12.     for (int i = 0; i < m; i++) {
  13.         for (int j = 0; j < n; j++) {
  14.             cin >> A[i][j];
  15.         }
  16.     }

  17.     // 輸出原始矩陣
  18.     cout << "Original:" << endl;
  19.     for (int i = 0; i < m; i++) {
  20.         cout << "[";
  21.         for (int j = 0; j < n; j++) {
  22.             cout << A[i][j];
  23.             if (j < n - 1) cout << " ";
  24.         }
  25.         cout << "]" << endl;
  26.     }

  27.     // 建立轉置矩陣 AT
  28.     vector<vector<int>> AT(n, vector<int>(m));

  29.     // 計算轉置矩陣
  30.     for (int i = 0; i < m; i++) {
  31.         for (int j = 0; j < n; j++) {
  32.             AT[j][i] = A[i][j];
  33.         }
  34.     }

  35.     // 輸出轉置矩陣
  36.     cout << "Transpose:" << endl;
  37.     for (int i = 0; i < n; i++) {
  38.         cout << "[";
  39.         for (int j = 0; j < m; j++) {
  40.             cout << AT[i][j];
  41.             if (j < m - 1) cout << " ";
  42.         }
  43.         cout << "]" << endl;
  44.     }

  45.     return 0;
  46. }
複製代碼
回復 1# may
-------------------------------------------------------------------------------
程式說明
輸入處理

先讀取矩陣的列數 m 和行數 n。
使用 vector<vector<int>> 建立一個 m x n 的二維陣列 A 來儲存原始矩陣數據。
使用兩層迴圈讀取 m * n 個整數並填入 A。
輸出原始矩陣

按照格式輸出,每列以 [ 和 ] 包圍,數字之間用空格隔開。
計算轉置矩陣

轉置後的矩陣大小為 n x m,使用 vector<vector<int>> 建立 AT 矩陣。
透過 AT[j] = A[j] 進行轉置。
輸出轉置矩陣

同樣按照格式輸出,每列以 [ 和 ] 包圍,數字之間用空格隔開。
------------------------------------------
測資:
測資 00(基礎測試:2×3 矩陣)

輸入
2
3
1
2
3
4
5
6

預期輸出
Original:
[1 2 3]
[4 5 6]
Transpose:
[1 4]
[2 5]
[3 6]

測資 01(正方形矩陣:3×3)
輸入
3
3
-1
25
-5
33
100
-78
56
63
-99
預期輸出
Original:
[-1 25 -5]
[33 100 -78]
[56 63 -99]
Transpose:
[-1 33 56]
[25 100 63]
[-5 -78 -99]

測資 02(單列矩陣:1×4)
輸入
1
4
8
3
7
2
預期輸出
Original:
[8 3 7 2]
Transpose:
[8]
[3]
[7]
[2]

測資 03(單行矩陣:4×1)
輸入
4
1
9
6
-2
4
預期輸出
Original:
[9]
[6]
[-2]
[4]
Transpose:
[9 6 -2 4]

測資 04(較大矩陣:3×4)
輸入
3
4
5
10
15
20
25
30
35
40
45
50
55
60
預期輸出
Original:
[5 10 15 20]
[25 30 35 40]
[45 50 55 60]
Transpose:
[5 25 45]
[10 30 50]
[15 35 55]
[20 40 60]

這些測資涵蓋:

一般情況(矩陣寬高不同)
正方形矩陣(測試轉置是否正確)
單列矩陣(轉置後變成單行矩陣)
單行矩陣(轉置後變成單列矩陣)
較大矩陣(測試較多數據)
May

TOP

返回列表