# 解題紀錄 ## 題目:a009. 解碼器 ## 📙 題目描述 已知一(m x n)矩陣A,我們常常需要用到另一個將A中之行與列調換的矩陣。這個動作叫做矩陣的翻轉。舉例來說,若 $A =\begin{bmatrix} 3 & 1 & 2 \\ 5 & 8 & 4 \end{bmatrix}$ 則 $A^T =\begin{bmatrix} 3 & 8 \\ 1& 5 \\ 2 & 4 \end{bmatrix}$ 現在 請您針對所讀取到的矩陣進行翻轉。 🫠**原本題目沒有打數學式很難看** ```txt 輸入說明 第一行會有兩個數字,分別為 列(row)<100 和 行(column)<100,緊接著就是這個矩陣的內容 ``` ```txt 輸出說明 直接輸出翻轉後的矩陣 ``` ```txt 範例輸入 #1 2 3 3 1 2 8 5 4 範例輸出 #1 3 8 1 5 2 4 ``` --- ## ✒️ 解題思路 求 $A^T$ - 把 $A$ 的行寫為 $A^T$ 的列 - 把 $A$ 的列寫為 $A^T$ 的行 可以參考之前我做的[陣列筆記](https://hackmd.io/@tsai1008/BkJ-g-25yx#5-%E4%BA%8C%E7%B6%AD%E9%99%A3%E5%88%97-%E8%88%87-%E5%85%83%E7%B4%A0%E4%BD%8D%E7%BD%AE) --- ## 💻 C語言解法 ```c #include <stdio.h> #include <stdlib.h> int main() { int m ,n ; while(scanf("%d %d", &m,&n) != EOF){ int *p = (int *)malloc(m * n * sizeof(int)); for(int i = 0; i < m; i++){//以列為主的存放方式 for(int j = 0; j < n; j++){ scanf("%d", p + i * n + j); } } for(int i = 0; i < n; i++){//以行為主的輸出 for(int j = 0; j < m; j++){ printf("%d", *(p + j * n + i)); if(j != m - 1){ putchar(' '); } } putchar('\n'); } free(p); } return 0; } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up