题目描述:

 

  任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。

 

输入:  输入有多组数据。每组数据第一行输入n(1<=n<=9),从第二行开始输入两个n阶矩阵。

 

输出:

  判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。如果旋转角度的结果有多个,则输出最小的那个。

 

这题我用了函数进行判断,形参为二维数组。

二维数组实际上是不能做形参的,我参考了一下网上的做法,http://hi.baidu.com/zhihui3409/blog/item/dafbd14eac22330cb2de054b.html

代码如下:

#include<stdio.h>

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

int turn90(int a[10][10],int b[10][10],int n)
{
    int i,j,flag=1;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            if(a[i][j]!=b[n-j-1][i]) flag=0;
    return flag;
}

int turn180(int a[10][10],int b[10][10],int n)
{
    int i,j,flag=1;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            if(a[i][j]!=b[n-i-1][n-j-1]) flag=0;
    return flag;
}

int turn270(int a[10][10],int b[10][10],int n)
{
    int i,j,flag=1;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            if(a[i][j]!=b[j][n-i-1]) flag=0;
    return flag;
}

int main()
{
    int n,a[10][10],b[10][10];
    while(scanf("%d",&n)!=EOF)
    {
        int i,j,flag=0;
        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(turn0(b,a,n)==1) {printf("0\n");continue;}
        else if(turn90(b,a,n)==1) {printf("90\n");continue;}
        else if(turn180(b,a,n)==1) {printf("180\n");continue;}
        else if(turn270(b,a,n)==1) {printf("270\n");continue;}
        else printf("-1\n");
    }
    return 0;
}

我自认为我的算法不怎么样,如果哪位牛人有更好的算法,欢迎提供宝贵的意见,谢谢~