移动机器人

发布时间 2023-04-03 20:04:53作者: Hi,小董先生

【问题描述】

N×M的网格中,有一个机器人,它的初始位置为x,y。

# 左上角为(1,1),右下角为(N,M)。

机器人可以接收上/下/左/右移动某个x个单位的指令。

如:L5表示向左移动5个单位,R3表示向右移动3个单位,U2表示向上移动2个单位,D4表示向下移动4个单位。

移动单位的取值范围在19之内。

注意,一旦移动到网格的边界,就无法继续沿着这个方向移动。

现给定一串指令序列,输出机器人的坐标。

【输入描述】

第一行,4个数字,分别表示N,M,x,y。

第二行,一个由字母L,R,U,D和数字19组成的字符串。

【输出描述】

两个数字,空格隔开,表示机器人的坐标。

用例输入1 

10 10 5 3
L2R3U3D1

用例输出1 

3 4

用例输入2 

5 5 1 1 
L3R3U3D3

用例输出2 

4 4

提示

对于100%的数据,1N,M,x,y100,字符串长度1000

 

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int n, m, x, y;
    string s;
    cin >> n >> m >> x >> y >> s;
    for(int i=0; i<s.length(); i++)
    {
        if(s[i] == 'L')
        {
            y -= s[i+1] - 48;
            if(y<1) y = 1;
        }
            
        else if(s[i] == 'R')
        {
            y += s[i+1] - 48;
            if(y>m) y = m;
        }
        else if(s[i] == 'U')
        {
            x -= s[i+1] - 48;
            if(x<1) x = 1;
        }
        else if(s[i] == 'D')
        {
            x += s[i+1] - 48; 
            if(x>n) x = n;
        }
    }
    cout << x << " " << y;
    return 0;
}