题目描述:
任意输入两个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; }
我自认为我的算法不怎么样,如果哪位牛人有更好的算法,欢迎提供宝贵的意见,谢谢~