北航计算机机试08旋转矩阵

旋转矩阵
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。(60分)
我一直觉得这句话有含义……
思路:旋转一次则是
旋转90°:a[i][j]=a[j][n-1-i];
旋转180°: a[i][j]=a[n-i-1][n-j-1];
旋转270°: a[i][j]=a[n-j-1][i];

–!!!!!!!输入一定要确保能循环输入!!!!!!!!!!!!!!

#include <stdio.h>

#define MAX_SIZE 9

int rever(int a[][MAX_SIZE],int n,int b[][MAX_SIZE],int tri);
int compare(int a[][MAX_SIZE],int n,int b[][MAX_SIZE]);

int main()
{
    int n;//阶
    int i,j;
    int angle;
    while(scanf("%d",&n)!=EOF)
    {
    int a[MAX_SIZE][MAX_SIZE],b[MAX_SIZE][MAX_SIZE];

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&b[i][j]);
        }
    }
    if(compare(a,n,b)==1) angle=0;
    else{
        angle=rever(a,n,b,90);
    }
    printf("%d\n",angle);
    }
    return 0;
}

int rever(int a[][MAX_SIZE],int n,int b[][MAX_SIZE],int tri)
{
        int flag=0;
        int c[MAX_SIZE][MAX_SIZE];
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
            c[j][n-i-1]=a[i][j];
            }
        }
        if(compare(c,n,b)==0&&tri<270)
        {
            tri+=90;
            flag=rever(c,n,b,tri);
            return flag;
        }
        else if(tri==270)
        {
            return -1;
        }
        else{
            return tri;
        }


}




int compare(int a[][MAX_SIZE],int n,int b[][MAX_SIZE])
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(a[i][j]!=b[i][j])
                return 0;
        }
    }
    return 1;
}

#include <stdio.h>

#define MAX_SIZE 9

int main()
{
    int n;//int i,j;
    int flag=0;
    int f[4]={0,0,0,0};
    int a[MAX_SIZE][MAX_SIZE],b[MAX_SIZE][MAX_SIZE];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&b[i][j]);
        }
    }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(a[i][j]==b[i][j])
                    f[0]++;
                if(a[i][j]==b[j][n-i-1])
                    f[1]++;
                if(a[i][j]==b[n-i-1][n-j-1])
                    f[2]++;
                if(a[i][j]==b[n-j-1][i])
                    f[3]++;
            }
        }
        for(i=0;i<4;i++)
        {
            if(f[i]==n*n)
            {
                printf("%d\n",i*90);
                flag++;
                break;
            }
        }
        if(flag==0)
            printf("-1\n");

    return 0;
}
全部评论

相关推荐

投票
我要狠拿offer:如果不是必须去成都绝对选九院呀,九院在四川top1研究所了吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务