Problem E: 机器人II
Time Limit: 1 Sec Memory Limit: 128 MB
Description
自从xiao_wu发明了只能向左转与向右转的机器人以后,热血沸腾的他又给机器人加了一个操作。假设机器人在二维坐标系的原点,一开始面向Y轴正方向(北N),现在给你一个仅由’L’,’R’,’M’的串,其中L表示向左转,R表示向右转,M表示向所面对的方向走一个单位的距离,试问经过操作过后,机器人的坐标和所面对的方向。
北(N),西(W),东(E),南(S)。
Input
第一行输入一个T(T<150),表示任务的个数
对于每个任务,输入一个串。(每个任务开始前机器人在原点,面向北(N),既Y轴正方向)
串长度不大于100
Output
对于每个任务,输出两个数表示机器人的坐标,一个字符表示机器人的面朝的方向。
Sample Input
2
LRMLL
LMRMMLLL
Sample Output
0 1 S
-1 2 E
----------------------------------------------------------------
解题报告:
- 此题很直接,就是判断方向时很麻烦(4方向分情况讨论?还是打算存储后处理?)
- 我的使用的方法是:以0,1,2,3定为东南西北(way=0,1,2,3);
- 那么左转的方向则是:way=(way+3)%4;
- 【本是:way=(way-1)%4,但东向左转时,该式为:way=(0-1)%4,显然不符合】
- 右转的方向为:way=(way+1)%4;(如下图:)
- 于是,代码如下:
----------------------------------------------------------------
代码:
#include<stdio.h>
#include<string.h>
int x,y;
char WAY[5]="ESWN";
int main(){
int T,len,way,i; //0 1 2 3
char ch,c[105];
scanf("%d",&T);
while( T-- ){
x=y=0; way=3;
scanf(" %s",c);
for(i=0; c[i] ;i++){
if( 'L'==c[i] ) way=(way+3)%4;
else if( 'R'==c[i] ) way=(way+1)%4;
else{
if( 0==way ) x++;
else if( 1==way ) y--;
else if( 2==way ) x--;
else y++;
}
}
printf("%d %d %c\n",x,y,WAY[way]);
}
return 0;
}