题目
蒜头君收到了一份礼物,是一个最新版的机器人。
这个机器人有 <math> <semantics> <mrow> <mn> 4 </mn> </mrow> <annotation encoding="application/x-tex"> 4 </annotation> </semantics> </math>4 种指令:
- forward x,前进 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application/x-tex"> x </annotation> </semantics> </math>x 米。
- back x,先向后转,然后前进 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application/x-tex"> x </annotation> </semantics> </math>x 米。
- left x,先向左转,然后前进 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application/x-tex"> x </annotation> </semantics> </math>x 米。
- right x,先向右转,然后前进 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application/x-tex"> x </annotation> </semantics> </math>x 米。
现在把机器人放在坐标轴原点,起始朝向为 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application/x-tex"> x </annotation> </semantics> </math>x 轴正方向。
经过一系列指令以后,你能告诉蒜头君机器人的坐标位置吗。
坐标轴上一个单位长度表示 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application/x-tex"> 1 </annotation> </semantics> </math>1 米。
输入格式
第一行输入一个整数 <math> <semantics> <mrow> <mi> n </mi> <mo> ( </mo> <mn> 1 </mn> <mo> ≤ </mo> <mi> n </mi> <mo> ≤ </mo> <mn> 100 </mn> <mo> ) </mo> </mrow> <annotation encoding="application/x-tex"> n(1 \le n \le 100) </annotation> </semantics> </math>n(1≤n≤100) 表示指令的个数。
接下里 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application/x-tex"> n </annotation> </semantics> </math>n 行,每行输入形如上面的指令,其中 <math> <semantics> <mrow> <mo> − </mo> <mn> 1000 </mn> <mo> ≤ </mo> <mi> x </mi> <mo> ≤ </mo> <mn> 1000 </mn> </mrow> <annotation encoding="application/x-tex"> -1000 \le x \le 1000 </annotation> </semantics> </math>−1000≤x≤1000。
输出格式
输出两个整数 <math> <semantics> <mrow> <mi> x </mi> <mo separator="true"> , </mo> <mi> y </mi> </mrow> <annotation encoding="application/x-tex"> x,y </annotation> </semantics> </math>x,y 表示机器人最后坐标。
用空格隔开。
样例输入
10
back -9
left 3
left 8
back 15
right 10
right -7
right -3
left 11
right 17
left 3
样例输出
9 -7
题解
把机器人想象成自己,随着命令转向就ok了
#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;
}