蒜头君收到了一份礼物,是一个最新版的机器人。这个机器人有4种指令:
- forward x,前进x米。
- back x,先后左转,然后前进x米。
- left x,先向左转,然后前进x 米。
- right x,先向右转,然后前进x米。
现在把机器人放在坐标轴原点,起始朝向为x轴正方向。经过一系列指令以后,你能告诉蒜头军机器人的坐标位置吗。坐标轴上一个单位长度表示1米。
输入格式
第一行输入一个整数n(1<=n<=100)表示指令的个数。
接下来n行,每行输入形如上面的指令,其中-1000<=x<=1000。
输出格式
输出两个整数x,y,表示机器人最后坐标。用空格隔开。
样例输入
10
back -9
left 3
left 8
back 15
right -7
tight -3
left 11
right 17
left 3
样例输出
9 -7
题解
代码:
#include<iostream>
using namespace std;
int x = 0,y = 0; // x y 轴坐标
//朝向,当值为 1 即朝向方面,起始朝右
int u = 0; // 上,即 y 轴正半轴
int d = 0; // 下,即 y 轴负半轴
int l = 0; // 左,即 x 轴负半轴
int r = 1; // 右,即 x 轴正半轴
// 前进 step 步
void move(int step){
if(u) // 如果是朝上
y += step;
else if(d) // 下
y -= step;
else if(l)
x -= step;
else if(r)
x += step;
}
int main(){
int n;
string in;
int step;
cin>>n;
while(n--){
cin>>in>>step;
if(in == "back"){ // 向后转的指令
if(u){ // 如果现在是向上,改为向下
u = 0;
d = 1;
}else if(d){ //
d = 0;
u = 1;
}else if(l){
l = 0;
r = 1;
}else if(r){
r = 0;
l = 1;
}
}else if(in == "left"){ // 向左转
if(u){ // 如果现在是向上,改为向左
u = 0;
l = 1;
}else if(d){
d = 0;
r = 1;
}else if(l){
l = 0;
d = 1;
}else if(r){
r = 0;
u = 1;
}
}else if(in == "right"){ // 向右转
if(u){ // 如果现在是向上,改为向右
u = 0;
r = 1;
}else if(d){
d = 0;
l = 1;
}else if(l){
l = 0;
u = 1;
}else if(r){
r = 0;
d = 1;
}
}
// 移动
move(step);
}
cout<<x<<" "<<y;
return 0;
}