-
题目描述:
-
任意输入两个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
C++代码:
#include<iostream>
using namespace std;
bool f0();
bool f180();
bool f90();
bool f270();
int a[9][9],b[9][9];
int i,j;
int n;
int main()
{
while(cin>>n)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>a[i][j];
}//for
}//for
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>b[i][j];
}//for
}//for
if(f0())
cout<<0<<endl;
else if(f90())
cout<<90<<endl;
else if(f180())
cout<<180<<endl;
else if(f270())
cout<<270<<endl;
else
cout<<-1<<endl;
}//while
return 1;
}//main
bool f0()
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]!=b[i][j])
return false;
}
}
return true;
}//f0
bool f90()
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]!=b[j][n-i-1])
return false;
}
}
return true;
}//f90
bool f180()
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]!=b[n-i-1][n-j-1])
return false;
}
}
return true;
}//f180
bool f270()
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]!=b[n-j-1][i])
return false;
}
}
return true;
}
/**************************************************************
Problem: 1164
User: Carvin
Language: C++
Result: Accepted
Time:0 ms
Memory:1520 kb
****************************************************************/