任意输入两个 9 阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵(顺时针),如果是,输出旋转角度(0、90、180、270),如果不是,输出 −1。
输入格式
第一行包含整数 n,表示矩阵阶数。
接下来 n行,每行包含 n 个空格隔开的整数,表示第一个矩阵。
再接下来 n 行,每行包含 n 个空格隔开的整数,表示第二个矩阵。
输出格式
判断第二个矩阵是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出 −1。
如果旋转角度的结果有多个,则输出最小的那个。
数据范围
1≤n≤9
矩阵中元素取值范围 [1,9][1,9]
输入样例:
解释
3
1 2 3
4 5 6
7 8 9
7 4 1
8 5 2
9 6 3
输出样例:
90
#include<bits/stdc++.h>
using namespace std;
int n;
const int M = 10;
int a1[M][M],a2[M][M];
void input(){
for(int i = 1; i <=n; i++)
{
for(int j = 1; j <=n; j++)
{
cin>>a1[i][j];
}
}
for(int i = 1; i <=n; i++)
{
for(int j = 1; j <=n; j++)
{
cin>>a2[i][j];
}
}
}
int cheak(){
//0度
int b=1;
for(int i =1;i<=n;i++){
for(int j =1; j<=n;j++){
if(a1[i][j]==a2[i][j])
{
}else{
b=0;break;
}
}
}
if(b)return 0;
b=1;
//90度
for(int i =1; i<=n; i++)
{
for(int j =1; j<=n;j++)
{
if(a1[i][j]==a2[j][n-i+1]){}
else{
b=0;break;
}
}
}
if(b)return 90;
b=1;
for(int i =1; i<=n; i++)
{
for(int j =1; j<=n;j++)
{
if(a1[i][j]==a2[n-i+1][n-j+1]){}
else{
b=0;break;
}
}
}
if(b)return 180;
b=1;
for(int i =1; i<=n; i++)
{
for(int j =1; j<=n;j++)
{
if(a1[i][j]==a2[n-j+1][i]){}
else{
b=0;break;
}
}
}
if(b)return 270;
return -1;
}
int main()
{
cin>>n;
input();
cout<<cheak()<<"\n";
return 0;
}