某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(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)){
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)){
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)){
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 }
|