題意:
蒜頭君的班級裡有 n^2個同學,現在全班同學已經排列成乙個n∗n 的方陣,但是老師卻臨時給出了一組新的列隊方案,為了方便列隊,所以老師只關注這個方陣中同學的性別,不看具體的人是誰,這裡我們用0表示男生,用1表示女生,現在蒜頭君告訴你同學們已經排好的方陣是什麼樣的,再告訴你老師希望的方陣是什麼樣的,他想知道同學們已經列好的方陣能否通過順時針旋轉變成老師希望的方陣
1、不需要旋轉則輸出 0
2、順時針旋轉 90° 則輸出 1
3、順時針旋轉 180° 則輸出 2
4、順時針旋轉 270° 則輸出 3
若不滿足以上四種情況則輸出 -1
若滿足多種情況,則輸出較小的數字
輸入:
第一行為乙個整數 n;
接下來的n行同學們已經列好的01方陣;
再接下來的n行表示老師希望的的01方陣。
輸出:
輸出僅有一行,該行只有乙個整數,如題所示。
輸入樣例:
40 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
輸出樣例:
1解題思路:
陣列範圍比較小,可直接用兩個二維陣列儲存當前矩陣和目標矩陣,依次進行比較和旋轉。唯一的關鍵點在旋轉操作,注意到順時針旋轉90度以後,從行的角度看:原矩陣的第一行,變成了目標矩陣的最後一列。原矩陣的第二行,變成了目標矩陣的倒數第二列。原矩陣的第三行,變成了目標矩陣的倒數第三列。原矩陣的第四行,變成了目標矩陣的倒數第四列…從列的角度看:原矩陣的第一列,變成了目標矩陣的第一行,數字的方向相反。原矩陣的第二列,變成了目標矩陣的第二行,數字的方向相反。原矩陣的第三列,變成了目標矩陣的第三行,數字的方向相反。原矩陣的第四列,變成了目標矩陣的第四行,數字的方向相反。核心旋轉**為:
for
(int i=
0;i,dst--
)for
(int j=
0;j) tmp[j]
[dst]
=arr[i]
[j];
#include
using
namespace std;
int a[25]
[25];
int b[25]
[25];
int n;
bool
judge
(int a[25]
[25],
int b[25]
[25])
return
true;}
void
rotate
(int arr[25]
[25])
intmain
(int argc,
const
char
* ar**)
for(
int i=
0; i)for
(int j=
0; j)int ans=0;
while
(true)if
(judge
(a, b)
)rotate
(a);
ans++;}
return0;
}
矩陣的旋轉問題
輸入乙個4 4的矩陣,進行逆時針旋轉90度後輸出,要求原始陣列的資料隨機輸入,新資料以4行4列的方式輸出 可以通過乙個二維陣列實現輸入,然後轉換 i 行為 j 列,第乙個新行數的下標為0即可b 3 j i a i j 如下 示例 include intmain printf array b n fo...
矩陣運算 矩陣旋轉
以下不加證明地給出在世界座標系中,以座標點 0,0,0 為原點的旋轉矩陣 包含平移的線性變換稱作仿射變換,3d中的仿射變換不能用 3 x 3 矩陣表達,必須使用4 x 4矩陣 1.繞x座標軸旋轉 1 0 0 0 0 cos a sin a 0 0 sin a cos a 0 0 0 0 1 2.繞y...
Nxn 矩陣旋轉90度問題
december 8,2012 原文 given an image represented by an nxn matrix,where each pixel in the image is 4 bytes,write a method to rotate the image by 90 degre...