题目描述
小明有两个大小相同的矩形方阵分别是 A 和 B 。
矩形方阵中的元素只能为 0 或 1 。如果 A 和 B 是相似的,则满足下述要求并输出:
(1)A=B 相等,输出 0 。
(2)A 经过顺时针旋转 90 度成为 B ,则输出 1 。
(3)A 经过顺时针旋转 180 度成为 B ,则输出 2 。
(4)A 经过顺时针旋转 270 度成为 B ,则输出 3 。
如果 A,B 不满足上述任何一个条件,认为 A,B 是不相似的,则输出 −1 。
输入
第一行为一个整数 n 。
接下来的 n 行表示 A 矩阵。
在接下来的 n 行表示 B 矩阵。
数据范围:1≤n≤20。
输出
一个整数。
样例输入 Copy
4 0 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
样例输出 Copy
1
提示
样例 1 解释:输出 1 ,因为 A 顺时针旋转 90 度成为 B 。
输入样例2:
4
0 1 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
输出样例2:
-1
输入样例3:
4
0 0 0 0
0 0 0 0
0 1 0 1
0 0 0 0
0 0 0 0
1 0 1 0
0 0 0 0
0 0 0 0
输出样例3:
2
代码如下(有点长)
#include<bits/stdc++.h>
using namespace std;
int n,a[50][50],b[50][50],c[50][50];
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>b[i][j];
int tmp=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==b[i][j]) tmp++;
}
}
if(tmp==n*n){
cout<<0<<endl;
return 0;
}
tmp=0;
int k=1;
for(int i=n;i>=1;i--){
for(int j=n;j>=1;j--){
c[j][k]=a[i][j];
}
k++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(c[i][j]==b[i][j]){
tmp++;
}
}
}
if(tmp==n*n){
cout<<1<<endl;
return 0;
}
tmp=0;
k=1;
for(int i=n;i>=1;i--){
for(int j=n;j>=1;j--){
c[j][k]=a[i][j];
}
k++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=c[i][j];
}
}
tmp=0;
k=1;
for(int i=n;i>=1;i--){
for(int j=n;j>=1;j--){
c[j][k]=a[i][j];
}
k++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(c[i][j]==b[i][j]){
tmp++;
}
}
}
if(tmp==n*n){
cout<<2<<endl;
return 0;
}
tmp=0;
k=1;
for(int i=n;i>=1;i--){
for(int j=n;j>=1;j--){
c[j][k]=a[i][j];
}
k++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=c[i][j];
}
}
k=1;
for(int i=n;i>=1;i--){
for(int j=n;j>=1;j--){
c[j][k]=a[i][j];
}
k++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=c[i][j];
}
}
k=1;
for(int i=n;i>=1;i--){
for(int j=n;j>=1;j--){
c[j][k]=a[i][j];
}
k++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(c[i][j]==b[i][j]){
tmp++;
}
}
}
if(tmp==n*n){
cout<<3<<endl;
return 0;
}
cout<<-1;
return 0;
}
小提示:其实转270度时,可以向左转90度。