#15714: 解題報告


bear490421408 (bear)

學校 : 不指定學校
編號 : 83658
來源 : [124.9.117.230]
最後登入時間 :
2023-12-06 23:15:30
b965. 2. 矩陣轉換 -- 2016年3月apcs | From: [203.203.74.58] | 發表日期 : 2018-10-21 22:25

想法

旋轉逆向回去 是向左旋轉 =  轉置矩陣 + 上下翻轉 

翻轉 是上下互換

供參考   看到 用vector的 解法很快 可惜還不懂使用 

#include <iostream>
using namespace std;
int a[10][10];
int b[10][10];

void rotate(int r ,int c){

    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
            b[j][i]=a[i][j];
        }
    }
   for(int i=0;i<c;i++){
    for(int j=0;j<r;j++){
        a[i][j]=b[i][j];
    }
   }
   for(int i=0;i<c;i++){
    for(int j=0;j<r;j++){
        b[i][j]=a[c-i-1][j];
    }
   }
   for(int i=0;i<c;i++){
    for(int j=0;j<r;j++){
        a[i][j]=b[i][j];
    }
   }
}
void updown(int r,int c){
  for(int i=0;i<r;i++){
    for(int j=0;j<c;j++){
        b[i][j]=a[r-i-1][j];
    }
  }
  for(int i=0;i<r;i++){
    for(int j=0;j<c;j++){
        a[i][j]=b[i][j];
    }
  }

}

int main(){
int R,C,M;
int tmp;
int op[10];
while(cin>>R>>C>>M){
 for(int i=0;i<R;i++){
   for(int j=0;j<C;j++){
    cin>>a[i][j];
   }
 }
 for(int k=0;k<M;k++){
    cin>>op[k];
 }
  for(int k=M-1;k>=0;k--){
    if(op[k]==0){
        rotate(R,C);
        tmp=R;
        R=C;
        C=tmp;
    }
     else {
       updown(R,C);
     }
  }
 
ZeroJudge Forum