3527. 旋转矩阵 考研上机复试真题 暴力模拟

发布于:2024-03-25 ⋅ 阅读:(64) ⋅ 点赞:(0)

任意输入两个 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;
}

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到