欢迎访问==> 【考研OR保研】机试题
题目描述
任意输入两个 $9$ 阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵(顺时针),如果是,输出旋转角度($0、90、180、270$),如果不是,输出 $\-1$。
输入格式
第一行包含整数 $n$,表示矩阵阶数。
接下来 $n$ 行,每行包含 $n$ 个空格隔开的整数,表示第一个矩阵。
再接下来 $n$ 行,每行包含 $n$ 个空格隔开的整数,表示第二个矩阵。
输出格式
判断第二个矩阵是否是第一个的旋转矩阵,如果是,输出旋转角度($0、90、180、270$),如果不是,输出 $\-1$。
如果旋转角度的结果有多个,则输出最小的那个。
数据范围
$1 \\le n \\le 9$,
矩阵中元素取值范围 $\[1,9\]$
输入样例:
3
1 2 3
4 5 6
7 8 9
7 4 1
8 5 2
9 6 3
输出样例:
90
C++ 代码
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> a, b;
int n, res = -1;
//顺时针旋转90°
vector<vector<int>> turn(vector<vector<int>> a)
{
vector<vector<int>> res = a;
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++) res[i][j] = a[n - j - 1][i];
}
return res;
}
int main()
{
cin >> n;
a.resize(n, vector<int>(n));
b.resize(n, vector<int>(n));
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++) cin >> a[i][j];
}
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++) cin >> b[i][j];
}
for(int i = 0; i < 4; i ++)
{
if(a == b) { res = i * 90; break; }
a = turn(a); //顺时针旋转90°
}
cout << res << endl;
return 0;
}