描述
首先输入一个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
输入:
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.util.Scanner;
/*
* C翻转
*/
public class CFlip {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
int[][] arr = new int[5][5];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
arr[i][j] = scanner.nextInt();
}
}
int a = scanner.nextInt();
int b = scanner.nextInt();
//对应下标为x-1,y-1
int x = scanner.nextInt();
int y = scanner.nextInt();
//获取以x,y为左上角的b²个数
int[][] arrBefore = new int[b][b];
for (int i = 0; i < b; i++) {
for (int j = 0; j < b; j++) {
arrBefore[i][j] = arr[i+x-1][j+y-1];
}
}
//将这些数按要求旋转
int[][] arrFlip = flip(arrBefore, a, b);
for (int i = 0; i < arrFlip.length; i++) {
for (int j = 0; j < arrFlip.length; j++) {
arr[i+x-1][j+y-1] = arrFlip[i][j];
}
}
//输出旋转后的数组
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
public static int[][] flip(int[][] arrBefore,int a,int b) {
int[][] arrFlip = new int[b][b];
if (a == 1) { //顺时针翻转90度
for (int i = 0; i < b; i++) {
for (int j = 0; j < b; j++) {
arrFlip[i][j] = arrBefore[b-j-1][i];
}
}
return arrFlip;
}else if (a == 2) { //逆时针翻转90度
for (int i = 0; i < b; i++) {
for (int j = 0; j < b; j++) {
arrFlip[i][j] = arrBefore[j][b-i-1];
}
}
return arrFlip;
}
return arrFlip;
}
}