矩陣順時針旋轉90°、180°、270°
阿新 • • 發佈:2019-01-25
問題及程式碼:
/* * Copyright (c) 2014, 煙臺大學計算機學院 * All rights reserved. * 檔名稱:sdoj.cpp * 作 者:李楠 * 完成日期:2015年2月7日 * 版 本 號:v1.0 * * 問題描述:矩陣A在順時針旋轉一定角度後是否和矩陣B完全一樣 * 輸入描述:有多組輸入。 每組輸入先輸入一個整數N(N <= 50),代表矩陣的大小。 接下來的N行,每行有N個整數。代表矩陣A。 再接下來的N行N個整數代表矩陣B。 * 程式輸出:如果矩陣A在旋轉一定角度後能和矩陣B完全一樣則輸出YES,否則輸出NO。 */ #include <iostream> using namespace std; int main() { int first[51][51]; int second[51][51]; int third[51][51]; int four[51][51]; int five[51][51]; int i,j,k; int n,l=1; while(cin>>n&&n<=50&&n>1) { k=n-1; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>first[i][j]; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>third[i][j]; for(i=0;i<n;i++,k--) for(j=0;j<n;j++) second[j][k]=first[i][j]; k=n-1; for(i=0;i<n;i++,k--) for(j=0;j<n;j++) four[i][j]=first[j][k]; for(i=0;i<n;i++) for(j=0;j<n;j++) five[i][j]=first[n-1-i][n-1-j]; for(i=0;i<n;i++) for(j=0;j<n;j++) { if(second[i][j]!=third[i][j]&&four[i][j]!=third[i][j]&&five[i][j]!=third[i][j]) { l=0; break; } } if(l!=0) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
執行結果:
知識點總結:
1.從行的角度看:
原矩陣的第一行,變成了目標矩陣的最後一列。
原矩陣的第二行,變成了目標矩陣的倒數第二列。
原矩陣的第三行,變成了目標矩陣的倒數第三列。
原矩陣的第四行,變成了目標矩陣的倒數第四列。
.......
2.從列的角度看:
原矩陣的第一列,變成了目標矩陣的第一行,數字的方向相反。
原矩陣的第二列,變成了目標矩陣的第二行,數字的方向相反。
原矩陣的第三列,變成了目標矩陣的第三行,數字的方向相反。
原矩陣的第四列,變成了目標矩陣的第四行,數字的方向相反。
...
由此可知,矩陣順時針旋轉90的結果,就是把行變成列,把列變成行。
同理,逆時針旋轉90°也是這樣…
順時針旋轉180°:
如:1 2 3
4 5 6
7 8 9
旋轉後為:
9 8 7
6 5 4
3 2 1
可知:旋轉後的順序是原來的逆序,那麼就好寫了~~
學習心得:
好吧…矩陣旋轉角度的我剛剛弄懂…