描述
自从xiao_wu发明了只能向左转与向右转的机器人以后,热血沸腾的他又给机器人加了一个操作。假设机器人在二维坐标系的原点,一开始面向Y轴正方向(北N),现在给你一个仅由’L’,’R’,’M’的串,其中L表示向左转,R表示向右转,M表示向所面对的方向走一个单位的距离,试问经过操作过后,机器人的坐标和所面对的方向。
北(N),西(W),东(E),南(S)。
-
输入
-
第一行输入一个T(T<150),表示任务的个数
对于每个任务,输入一个串。(每个任务开始前机器人在原点,面向北(N),既Y轴正方向)
串长度不大于100
输出
- 对于每个任务,输出两个数表示机器人的坐标,一个字符表示机器人的面朝的方向。 样例输入
-
2 LRMLL LMRMMLLL
样例输出
-
0 1 S -1 2 E
解题思路:我们可以用数字dir来记录机器人的方向,因为只有四个方向,且开始时是面朝北,所以就用四的倍数来记录北方,左拐时dir-1,当减到1时再左拐就让dir变为4,因为面向东边左拐时是北边,用3记录西面,2记录南面,1记录东面。
#include<stdio.h> #include<string.h> int main() { int n,i,j,dir,x,y,len; char s[105]; scanf("%d",&n); while(n--) { scanf("%s",s); dir=4; x=y=0; len=strlen(s); for(i=0;i<len;i++) { if(s[i]=='L') { if(dir==1) dir=4; //开始面向东,再左拐就是北 else dir--; } else if(s[i]=='R') { if(dir==4) dir=1; //开始面向北,再右拐就是东 else dir++; } else if(s[i]=='M') { if(dir%4==0) y++; //向上走 if(dir%4==3) x--; //向左走 else if(dir%4==2) y--; //向下走 else if(dir%4==1) x++; //向右走 } } printf("%d %d ",x,y); if(dir%4==0) printf("N\n"); else if(dir%4==3) printf("W\n"); else if(dir%4==2) printf("S\n"); else printf("E\n"); } return 0; }