方向反转

第一题:反转方向

    康师傅最近打印了一张描述了从他家穿过所在城市到一个热门的饭店的路线说明,但是忘记了打印回家的路线说明。请帮康师傅转换出一个从饭店回家的路线说明。路线说明是一个由多条指令构成的集合。第一个指令形如"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();
  }
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值