题目

蒜头君收到了一份礼物,是一个最新版的机器人。
这个机器人有 <math> <semantics> <mrow> <mn> 4 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 4 </annotation> </semantics> </math>4 种指令:

  1. forward x,前进 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> x </annotation> </semantics> </math>x 米。
  2. back x,先向后转,然后前进 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> x </annotation> </semantics> </math>x 米。
  3. left x,先向左转,然后前进 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> x </annotation> </semantics> </math>x 米。
  4. right x,先向右转,然后前进 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> x </annotation> </semantics> </math>x 米。

现在把机器人放在坐标轴原点,起始朝向为 <math> <semantics> <mrow> <mi> x </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> x </annotation> </semantics> </math>x 轴正方向。
经过一系列指令以后,你能告诉蒜头君机器人的坐标位置吗。
坐标轴上一个单位长度表示 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application&#47;x&#45;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&#47;x&#45;tex"> n(1 \le n \le 100) </annotation> </semantics> </math>n(1n100) 表示指令的个数。
接下里 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;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&#47;x&#45;tex"> -1000 \le x \le 1000 </annotation> </semantics> </math>1000x1000

输出格式

输出两个整数 <math> <semantics> <mrow> <mi> x </mi> <mo separator="true"> , </mo> <mi> y </mi> </mrow> <annotation encoding="application&#47;x&#45;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;
}

返回目录,查看更多