蒜头君收到了一份礼物,是一个最新版的机器人。
这个机器人有 44 种指令:
forward x,前进 xx 米。
back x,先向后转,然后前进 xx 米。
left x,先向左转,然后前进 xx 米。
right x,先向右转,然后前进 xx 米。
现在把机器人放在坐标轴原点,起始朝向为 xx 轴正方向。
经过一系列指令以后,你能告诉蒜头君机器人的坐标位置吗。
第一行输入一个整数 n(1≤n≤100)n(1≤n≤100) 表示指令的个数。
接下里 n行,每行输入形如上面的指令,其中 −1000≤x≤1000−1000≤x≤1000。
输出两个整数 x,yx,y 表示机器人最后坐标。
用空格隔开。
10
back -9
left 3
left 8
back 15
right 10
right -7
right -3
left 11
right 17
left 3
9 -7
这道题的关键就是每一次的转向都是在上一次的基础上来判断的,可以用head来记录方向。顺时针:head = 1表示向前,2表示向下,3表示向后,0表示向上。 举例:比如head初始化为1,机器人先向前再向左再向右,如图——>
head变化过程: head = 1; head = 0; head = 1; 由图可以看出,先是x = x+b,然后y = y+b;再然后x = x+b;
#include <iostream>
using namespace std;
int main()
{
int x,y,n;
int head = 1;
x = 0;
y = 0;
cin>>n;
while(n--){
string s;
int b;
cin>>s>>b;
if(s[0] == 'f'){
head = (head += 0)%4;
}
if(s[0] == 'b'){
head = (head += 2)%4;
}
if(s[0] == 'l'){
head = (head += 3)%4;
}
if(s[0] == 'r'){
head = (head += 1)%4;
}
if(head == 0){
y+=b;
}
if(head == 1){
x+=b;
}
if(head == 2){
y-=b;
}
if(head == 3){
x-=b;
}
}
cout<<x<<" "<<y;
return 0;
}