牛客网 旋转矩阵(模拟、北航机试)
发布时间
阅读量:
阅读量
题目描述
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。 要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。
输入描述:
输入有多组数据。
每组数据第一行输入n(1<=n<=9),从第二行开始输入两个n阶矩阵。
输出描述:
判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
如果旋转角度的结果有多个,则输出最小的那个。
输入
3
1 2 3
4 5 6
7 8 9
7 4 1
8 5 2
9 6 3
输出
90
Solution
根据各个旋转角度单独判断。
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 10;
int n;
int num1[maxn][maxn], num2[maxn][maxn];
bool rotate_0()
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (num1[i][j] != num2[i][j])
return false;
return true;
}
bool rotate_90()
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (num1[i][j] != num2[j][n - i - 1])
return false;
return true;
}
bool rotate_180()
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (num1[i][j] != num2[n - i - 1][n - j - 1])
return false;
return true;
}
bool rotate_270()
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (num1[i][j] != num2[n - j - 1][i])
return false;
return true;
}
int main()
{
// freopen("in.txt","r",stdin);
while (~scanf("%d", &n))
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
scanf("%d", &num1[i][j]);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
scanf("%d", &num2[i][j]);
if (rotate_0())
printf("0\n");
else if (rotate_90())
printf("90\n");
else if (rotate_180())
printf("180\n");
else if (rotate_270())
printf("270\n");
else
printf("-1\n");
}
return 0;
}
全部评论 (0)
还没有任何评论哟~
