机器人

蒜头君收到了一份礼物,是一个最新版的机器人。

这个机器人有 44 种指令:

  1. forward x,前进 xx 米。

  2. back x,先向后转,然后前进 xx 米。

  3. left x,先向左转,然后前进 xx 米。

  4. right x,先向右转,然后前进 xx 米。

现在把机器人放在坐标轴原点,起始朝向为 xx 轴正方向

经过一系列指令以后,你能告诉蒜头君机器人的坐标位置吗。

坐标轴上一个单位长度表示 11 米。

机器人

输入格式

第一行输入一个整数 n(1n100)n(1 \le n \le 100) 表示指令的个数。

接下里 nn 行,每行输入形如上面的指令,其中 1000x1000-1000 \le x \le 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

解:
并不是单纯的移动,机器人带有的是转向功能,转的方向是以机器人为参照物。

方向可由数字代代替,方便变更,+X为0,右转就+1,左转-1,那么-Y为1,-X为2,+Y为3,用%=4来限制大小,但依旧会出现负数,因为数目不大,可以一一例出来,1、-3相同,2、-2相同,3、-1相同
代码:

#include"iostream"
#include"string"
using namespace std;

int main()
{
	int n,d,x=0,y=0;
	int towards=0;//表示朝向,0为+x,1为-y,2为-x,3为+y,形成一个圈
	//取余不能满足所有情况,但能保证在-3,3之间,因此举例就好
	string a;//指令
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a;
		cin>>d;
		switch(a[0])//转向
		{
		case 'f':
			break;
		case 'b':
			towards+=2;
			towards%=4;
			break;
		case 'l':
			towards--;
			towards%=4;
			break;
		case 'r':
			towards++;
			towards%=4;
			break;
		}
		switch(towards)//朝什么方向前进
		{
		case 0:
			x+=d;
			break;
		case 1:
		case -3:
			y-=d;
			break;
		case 2:
		case -2:
			x-=d;
			break;
		case 3:
		case -1:
			y+=d;
			break;
		}
	}
	
	cout<<x<<" "<<y;
	return 0;
}