-
题目描述:
-
首先输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。
操作类型有四种:
1 2 表示:90度,顺时针,翻转4个数
1 3 表示:90度,顺时针,翻转9个数
2 2 表示:90度,逆时针,翻转4个数
2 3 表示:90度,逆时针,翻转9个数
-
输入:
-
输入有多组数据。
每组输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。
-
输出:
-
输出翻转后的数组。
-
样例输入:
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 3 1 1
-
样例输出:
-
11 6 1 4 5 12 7 2 9 10 13 8 3 14 15 16 17 18 19 20 21 22 23 24 25
import java.io.IOException; import java.io.FileReader; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; import java.lang.Comparable; import java.util.ArrayList; import java.util.Collections; class Main { public static final boolean DEBUG = false; public static int[][] a = new int[5][5]; public static int op1, op2, x, y; public static void solve() { int xend = Math.min(5, x + op2); int yend = Math.min(5, y + op2); int[][] b = new int[5][5]; //System.out.println("xend = " + xend + " yend = " + yend); for (int i = 0; i < 5; i++) { System.arraycopy(a[i], 0, b[i], 0, a[i].length); } if (op1 == 1) { for (int i = x; i < xend; i++) { for (int j = y; j < yend; j++) { b[j][x + yend - 1 - i] = a[i][j]; } } } else { for (int i = x; i < xend; i++) { for (int j = y; j < yend; j++) { b[y + xend - 1 - j][y + i - x] = a[i][j]; } } } for (int i = 0; i < 5; i++) { boolean first = true; for (int j = 0; j < 5; j++) { if (first) first = false; else System.out.print(" "); System.out.print(b[i][j]); } System.out.println(); } } public static void main(String[] args) throws IOException { Scanner cin; if (DEBUG) { cin = new Scanner(new FileReader("d:\\OJ\\uva_in.txt")); } else { cin = new Scanner(new InputStreamReader(System.in)); } while (cin.hasNext()) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { a[i][j] = cin.nextInt(); } } op1 = cin.nextInt(); op2 = cin.nextInt(); x = cin.nextInt(); y = cin.nextInt(); x--; y--; solve(); } } }