-
题目描述:
-
任意输入两个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
-
-
找规律就行了,刚开始没注意还有0度,WA了好几次。。
-
-
#include <stdio.h> int a[15][15], b[15][15], a1[15][15], a2[15][15], a3[15][15]; int n; int angle(int b[15][15]) { int res0 = 1, res1 = 1, res2 = 1, res3 = 1; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(b[i][j] != a[i][j]) res0 = 0; if(b[i][j] != a1[i][j]) res1 = 0; if(b[i][j] != a2[i][j]) res2 = 0; if(b[i][j] != a3[i][j]) res3 = 0; } } if(res0 == 1) return 0; else if(res1 == 1) return 1; else if(res2 == 1) return 2; else if(res3 == 1) return 3; else return -1; } int main() { freopen("Test.txt","r",stdin); while(scanf("%d",&n) != EOF) { int i,j; for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) scanf("%d",&a[i][j]); for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) scanf("%d",&b[i][j]); for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { a1[i][j] = a[n-j+1][i]; a2[i][j] = a[n-i+1][n-j+1]; a3[i][j] = a[j][n-i+1]; } } /* for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { printf("%d ",a1[i][j]); } printf("\n"); } */ int ans = angle(b); if(ans == 0) printf("0\n"); else if(ans == 1) printf("90\n"); else if(ans == 2) printf("180\n"); else if(ans == 3) printf("270\n"); else printf("-1\n"); } return 0; }