計蒜客 矩陣反轉
阿新 • • 發佈:2018-12-15
題目描述
- 24.22%
- 1000ms
- 65536K
曉萌最近在做一個翻轉圖片的應用,你可能也知道,圖片其實是由一個個的點組成的。於是,曉萌想先做一個可以翻轉矩陣的程式,來解決他問題的核心部分。
輸入格式
輸入第一行包括由空格分開的整數 M,N,T(0 < N,M < 200),T 的值為 0或 1。其中 M 和 N分別表示待處理矩陣的行數與列數,T 為 00時表示左右翻轉,為 1 時表示上下翻轉。
之後的 M 行,每行包括由空格分隔的 N 個整數,依次為輸入矩陣的每一行的資料。
輸出格式
輸出包括 MM行 NN列,每個數字之間用一個空格分隔,每一行行末均有一個空格,表示的是按照要求翻轉後的矩陣。
樣例輸入
4 4 1
1 2 3 4
5 6 7 8
9 0 1 2
3 4 5 6
樣例輸出
3 4 5 6
9 0 1 2
5 6 7 8
1 2 3 4
AC程式碼:
#include<bits/stdc++.h> #define n 205 using namespace std; int main() { int a[n][n],s,M,N,T; cin>>M>>N>>T; for(int i=1;i<=M;i++) { for(int j=1;j<=N;j++) cin>>a[i][j]; } if(T==0) { for(int i=1,j=N;i<=N/2&&j>=N/2;i++,j--) //注意控制條件,如果為i<=N&&j<=N,首先j的條件不對 //為一直滿足,其次應均為N/2,不然相當於翻轉再翻轉為原樣 { for(int k=1;k<=M;k++) { s=a[k][i]; a[k][i]=a[k][j]; a[k][j]=s; } } } if(T==1) { for(int i=1,j=M;i<=M/2&&j>=M/2;i++,j--) { for(int k=1;k<=N;k++) { s=a[i][k]; a[i][k]=a[j][k]; a[j][k]=s; } } } for(int i=1;i<=M;i++) { for(int j=1;j<=N;j++) { cout<<a[i][j]<<' '; } cout<<endl; } return 0; }
思路註釋:
1、迴圈巢狀,外層控制行列的向中進行,裡層控制將這兩行或列的元素交換。
2、注意控制條件,如果為i<=N&&j<=N,首先j的條件不對為一直滿足,其次應均為N/2,不然相當於翻轉再翻轉為原樣。