某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(x=0,y=0)并规定,每向东增加100米,x加1,每向北增加100米,y加1。同时,我军情报部门也破译了敌军向坦克发送的指挥信号,其中有三种信号(L,R,M)用于控制坦克的运动,L 和 R 分别表示使令坦克向左、向右转向,M 表示令坦克直线开进100米,其它信号如T用于时间同步,P用于位置较准。
一日,我军侦察兵发现了敌军的一辆坦克,侦察兵立即将坦克所在坐标(P, Q)及坦克前进方向(W:西,E:东,N:北,S:南)发送给指挥部,同时启动信号接收器,将坦克接收到的信号实时同步发往指挥部,指挥部根据这些信息得以实时掌控了该坦克的位置,并使用榴弹炮精准地击毁了该坦克。
假设,侦察兵发送给指挥部的信息如下:
坦克坐标:(11,39)
坦克运行方向:W
坦克接收到的信号为:MTMPRPMTMLMRPRMTPLMMTLMRRMP
请通过编程计算出坦克所在的位置(编程语言不限)
Java的实现代码如下:
1 package bst; 2 3 public class Bst { 4 //坦克初始坐标 5 ZB zb = new ZB(11,39); 6 //坦克初始运行方向 7 String direction = "W"; 8 9 //根据接收到的信号编程计算出坦克最终的坐标 10 public ZB getZB(String news){ 11 12 String[] str = news.split(""); 13 14 for(int i = 0;i<str.length;i++){ 15 if("L".equals(str[i])){ 16 switch (direction) { 17 case "W":direction="S";break; 18 case "E":direction="N";break; 19 case "N":direction="W";break; 20 case "S":direction="E";break; 21 default:break; 22 } 23 }else if("R".equals(str[i])){ 24 switch (direction) { 25 case "W":direction="N";break; 26 case "E":direction="S";break; 27 case "N":direction="E";break; 28 case "S":direction="W";break; 29 default:break; 30 } 31 }else if("M".equals(str[i])){ 32 switch (direction) { 33 case "W":zb.setX(zb.getX()-1);break; 34 case "E":zb.setX(zb.getX()+1);break; 35 case "N":zb.setY(zb.getY()+1);break; 36 case "S":zb.setY(zb.getY()-1);break; 37 default:break; 38 } 39 } 40 } 41 42 return zb; 43 44 } 45 46 //打印出坦克的最终坐标 47 public static void main(String[] args) { 48 Bst bst = new Bst(); 49 ZB zb = bst.getZB("MTMPRPMTMLMRPRMTPLMMTLMRRMP"); 50 System.out.println("坦克所在的位置为:"+zb.toString()); 51 } 52 53 } 54 55 //坦克坐标类 56 class ZB{ 57 int x; 58 int y; 59 60 public ZB(int x, int y) { 61 super(); 62 this.x = x; 63 this.y = y; 64 } 65 66 public int getX() { 67 return x; 68 } 69 70 public void setX(int x) { 71 this.x = x; 72 } 73 74 public int getY() { 75 return y; 76 } 77 78 public void setY(int y) { 79 this.y = y; 80 } 81 82 //重写toString方法 83 public String toString(){ 84 return "("+x+","+y+")"; 85 } 86 }