首页 > ACM题库 > 九度OJ > 九度-1164-旋转矩阵[解题代码]
2013
12-13

九度-1164-旋转矩阵[解题代码]

题目来源:2008年北京航空航天大学计算机研究生机试真题

题目描述:

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

java 代码如下:
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {
	static int[][] arr1,arr2;
	static int n;
	public static void main(String[] args) {
		Scanner s = new Scanner(new BufferedInputStream(System.in));
		while(s.hasNextInt()){
			n = s.nextInt();
			arr1 = new int[n][n];
			arr2 = new int[n][n];
			for(int i=0; i<n; i++)
				for(int j=0; j<n; j++)
					arr1[i][j] = s.nextInt();
			for(int i=0; i<n; i++)
				for(int j=0; j<n; j++)
					arr2[i][j] = s.nextInt();
			if(f90())
				System.out.println(90);
			else if(f0())
				System.out.println(0);
			else if(f180())
				System.out.println(180);
			else if(f270())
				System.out.println(270);
			else
				System.out.println(-1);
			
		}
	}
	
	static boolean f90() {
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++) {
				if (arr1[i][j] != arr2[j][n - i - 1])
					return false;
			}
		return true;
	}
	static boolean f0() {
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++) {
				if(arr1[i][j] != arr2[i][j])
					return false;
			}
		return true;
	}
	static boolean f180() {
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++) {
				if (arr1[i][j] != arr2[n-i-1][n-j-1])
					return false;
			}
		return true;
	}
	static boolean f270() {
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++) {
				if (arr1[i][j] != arr2[n-j-1][i])
					return false;
			}
		return true;
	}

}

/**************************************************************
	Problem: 1164
	User: coder
	Language: Java
	Result: Accepted
	Time:170 ms
	Memory:16840 kb
****************************************************************/