a015: 矩陣的翻轉

2022.11.23 PM 03:40 by CBJ

來源 : https://zerojudge.tw/ShowProblem?problemid=a015
出題者 : Zerojudge
標籤 : 陣列
難易度 : 2
解題想法 : 
題目輸入會有行數和列數,以下通稱為r和c。
以下以r=2,c=3的範例測資為例。
(輸入)    (所求)
3 1 2      3 8
8 5 4  =>  1 5
           2 4
透過觀察可以看到,所求的陣列第一排會是由輸入陣列的每行第一個所組成,第二行會是由輸入陣列的每行第二個所組成...

因此我們可以得出以下公式 :
*新陣列的第i行會由輸入陣列每列的第i個數字所組成*

所以我們每次只要分別取出"每行"的第1個數字丟到新陣列第1行,"每行"第2個數字丟到新陣列第2行....以此類推即可完成新陣列,實作上可以真的開一個新陣列來存,也可以直接就把答案輸出。
//C language
//solution link(含註解): 

#include <stdio.h>
int main()
{
    int r,c;
    while(scanf("%d%d",&r,&c)!=EOF){
        int matrix[105][105]={0};
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                scanf("%d",&matrix[i][j]);
            }
        }
        for(int i=0;i<c;i++){
            for(int j=0;j<r;j++){
                printf("%d ",matrix[j][i]);  //注意是 [j][i] 不是 [i][j] !
            }
            printf("\n");
        }
    }
    return 0;
}
//C++ language
//solution link(含註解): 

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int r,c;
    while(cin>>r>>c){
        vector<vector<int>>matrix(105,vector<int>(105));
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                cin>>matrix[i][j];
            }
        }
        for(int i=0;i<c;i++){
            for(int j=0;j<r;j++){
                cout<<matrix[j][i]<<" ";  //注意是 [j][i] 不是 [i][j] !
            }
            cout<<"\n";
        }
    }
    return 0;
}
## Python language
## solution link(含註解): 

from sys import stdin
for read in stdin:
    r,c=map(int,read.rstrip().split())
    matrix=[]
    for i in range(r):
        matrix.append([int(x) for x in input().split()])
    for i in range(c):
        for mat in matrix:
            print(mat[i],end=' ')
        print()

相關文章