[解题笔记]机器人问题 C++解法

题目:机器人问题

一个机器人有四种指令,:

forward x ,前进x米

back x, 先向后转,然后前进x 米

left x ,先向左转,然后前进x米

right x,先向右转,然后前进x米

现在把机器人放在坐标轴原点,起始朝向x轴正方向。经过一系列指令以后,求出机器人的坐标位置,坐标轴一个单位长度表示1米。

[解题笔记]机器人问题 C++解法_第1张图片

第一行输入一个整数n(1 <= n <= 100)表示指令的个数

接下来n行,每行输入形如上面的指令,其中-1000 <= x <= 1000

输出两个整数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
解题思路,用坐标轴的思路,用两个数组存储,(dx[d], dy[d]),指令用一个char数组记录,
每输入一次指令,都要分别判断机器人此时的朝向是哪里,以机器人为参照物,每一次的指令转向是不同的

#include
using namespace std;
int dx[4] = {0, -1, 0, 1};            //记录上下{上,左,下,右} 
int dy[4] = {1, 0, -1, 0};            //记录左右 
char op[15];                          //记录指令 
int main() {
    int n, d, x, nowx, nowy, i;
    cin >> n;
    d = 3;                            //初始位置朝向x轴正方向  d 这里是下标
    nowx = 0;
    nowy = 0;                         //初始位置在(0,0)点
    for (i = 0; i < n; i++) {
        cin >> op >> x;
        //判断当前的朝向
        if (op[0] == 'b') {           //下    指令都相同,所以可以指判断第一个字符
            d = (d + 2) % 4;          
        } else if (op[0] == 'l') {    //左 
            d = (d + 1) % 4;
        } else if (op[0] == 'r') {    //右 
            d = (d + 3) % 4;
        }
        nowx += dx[d] * x;             //移动步数 
        nowy += dy[d] * x;             //移动步数
    } 
    cout << nowx << " " << nowy << endl; 
    return 0;
}
[解题笔记]机器人问题 C++解法_第2张图片

你可能感兴趣的:(机器人,c++,算法,蓝桥杯)