首页 > 试题广场 >

C翻转

[编程题]C翻转
  • 热度指数:5717 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
首先输入一个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;

public class Main {
    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;
	}
}

发表于 2024-03-27 20:56:03 回复(0)
import java.util.*;
import java.util.regex.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String deleted=scanner.nextLine();
String style=".*?("+deleted+")"+".*?";
Pattern pattern = Pattern.compile(style,Pattern.CASE_INSENSITIVE);
List<String>list=new ArrayList<>();
while(scanner.hasNextLine()){
String currentLine=scanner.nextLine().replaceAll(" ", "");
Matcher matcher = pattern.matcher(currentLine);
int index=0;
while(matcher.find()){
int currentIndex=currentLine.indexOf(matcher.group(1));
if(currentIndex>=index){
currentLine=currentLine.replaceAll(matcher.group(1), "");
index=currentIndex;
}
}
list.add(currentLine);
}
for(int index=0;index<list.size();index++){
if(index<list.size()-1)
System.out.println(list.get(index));
else
System.out.print(list.get(index));
}
}
}

发表于 2017-01-30 22:57:20 回复(1)

问题信息

难度:
2条回答 5530浏览

热门推荐

通过挑战的用户

查看代码