机器人

题目描述

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

这个机器人有 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;
}

posted @ 2020-03-31 22:53  Tricia11  阅读(47)  评论(0)    收藏  举报  来源