第一题:反转方向
康师傅最近打印了一张描述了从他家穿过所在城市到一个热门的饭店的路线说明,但是忘记了打印回家的路线说明。请帮康师傅转换出一个从饭店回家的路线说明。路线说明是一个由多条指令构成的集合。第一个指令形如"Begin on XXX",指明了路线的起始街道。每一个后续指令形如"Left on XXX" 或 "Right on XXX",指明转向到一定道路上。在反转方向的时候,所有的左转均变成右转,反之亦然,并且道路和转向的顺序也反转。请看例子中的几个输入样例。
输入:
输入将从一个整形T开始,表示后续有T个实例。 每个实例由一个整数N开始,代表路线中的指令数。随后跟着N行,每行恰好一条指令,格式已在上文中描述过。
输出:
对每一个测试实例,打印出路线的反向走法,每条指令一行。在每个测试实例之后打印一个空行。
约束:
1 ≤ T ≤ 15
2 ≤ N ≤ 40
每行输入最多50个字符,只包含字符数字和空格,且不会包含连续的空格,末尾不会附加空格。
输入样例:
2 //单独一行,表示有两个测试用例
4 //第一个用例的指令数量,即有4行指令
Begin on Road A
Right on Road B
Right on Road C
Left on Road D
6 //第二个用例的指令数量
Begin on Old Madras Road
Left on Domlur Flyover
Left on 100 Feet Road
Right on Sarjapur Road
Right on Hosur Road
Right on Ganapathi Temple Road
输出样例:
Begin on Road D
Right on Road C
Left on Road B
Left on Road A
//注意空行
Begin on Ganapathi Temple Road
Left on Hosur Road
Left on Sarjapur Road
Left on 100 Feet Road
Right on Domlur Flyover
Right on Old Madras Road
说明:
在第一个测试实例中, 目的地位于 Road D,因此反方向的路线开始于 Road D。 在原路线中最后一次转向是从Road C 向左转到 Road D 。它在反向路线中,变成了从Road D向右转到Road C,且是第一次转向。
程序实现:
import java.util.Scanner;
public class Demo1 {
/**
* 主程序
*
* @param args
*/
public static void main(String[] args) {
// 从标准输入读取参数
Scanner scanner = new Scanner(System.in);
// 首先读取用例数
String input = scanner.nextLine();
int count = Integer.parseInt(input.trim());
String str[];
String str1[];
String str2[] = new String[2];
// 根据用例数进行循环处理
for (int i = 0; i < count; i++) {
input = scanner.nextLine();
int length = Integer.parseInt(input.trim());
str = new String[length];
str1 = new String[length];
for (int j = 0; j < length; j++) {
input = scanner.nextLine();
str2 = input.split("on");
try {
str[j] = str2[0];
str1[j] = str2[1];
} catch (Exception e) {
e.printStackTrace();
}
}
for (int j = length; j > 0; j--) {
if (j == length) {
System.out.println("Begin on" + str1[j - 1]);
continue;
}
if (str[j].equals("Left ")) {
System.out.println("Right on" + str1[j - 1]);
continue;
} else {
System.out.println("Left on" + str1[j - 1]);
continue;
}
}
System.out.println();
}
}
}