!{*(O^O)*}! 2025-01-13 19:04 采纳率: 88.5%
浏览 14
已结题

移动机器人 时间限制:C/C++ 1000MS 内存限制:C/C++ 256MB

描述

在N×M的网格中,有一个机器人,它的初始位置为x, y。
左上角为(1,1),右下角为(N,M)。机器人可以接收上/下/左/右移动某个x个单位的指令。如:L5表示向左移动5个单位,R3表示向右移动3个单位,U2表示向上移动2个单位,D4表示向下移动4个单位。移动单位的取值范围在1−9之内。
注意,一旦移动到网格的边界,就无法继续沿着这个方向移动。现给定一串指令序列,输出机器人的坐标。

输入描述

第一行,4个数字,分别表示 n 行 m 列,起始位置坐标为 (x,y) 。
第二行,一个由字母 L,R,U,D 和数字 1−9 组成的字符串。

输出描述

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

样例输入 1

10 10 5 3
L2R3U3D1
样例输出 1

3 4
样例输入 2

5 5 1 1
L3R3U3D3
样例输出 2

4 4
提示

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

  • 写回答

6条回答 默认 最新

  • 檀越@新空间 2025-01-13 19:05
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    要解决这个问题,我们需要解析给定的指令序列,并根据这些指令更新机器人的位置。具体来说,我们需要处理四种类型的指令(左、右、上、下),并确保机器人不会移出网格的边界。

    下面是详细的解决方案:

    解决方案

    1. 读取输入数据

      • 首先读取网格的大小 ( N ) 和 ( M )。
      • 然后读取机器人的起始位置 ( x ) 和 ( y )。
      • 最后读取指令字符串。
    2. 解析指令字符串

      • 遍历指令字符串,提取每个指令及其对应的移动单位。
      • 根据指令类型(L、R、U、D)更新机器人的位置。
    3. 更新位置

      • 确保每次更新位置时,机器人的新位置不会超出网格的边界。
    4. 输出结果

      • 打印机器人的最终位置。

    示例代码

    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    int main() {
        int N, M, x, y;
        string instructions;
    
        // 读取输入
        cin >> N >> M >> x >> y >> instructions;
    
        // 处理指令
        for (size_t i = 0; i < instructions.length(); ) {
            char direction = instructions[i];
            int distance = 0;
    
            // 解析距离
            if (isdigit(instructions[i + 1])) {
                distance = (instructions[i + 1] - '0');
                i += 2;
            } else {
                distance = 1;
                i++;
            }
    
            // 更新位置
            switch (direction) {
                case 'L':
                    x = max(1, x - distance);
                    break;
                case 'R':
                    x = min(N, x + distance);
                    break;
                case 'U':
                    y = max(1, y - distance);
                    break;
                case 'D':
                    y = min(M, y + distance);
                    break;
            }
        }
    
        // 输出结果
        cout << x << " " << y << endl;
    
        return 0;
    }
    

    解释

    • 读取输入:从标准输入读取 ( N ), ( M ), ( x ), ( y ) 和指令字符串。
    • 解析指令字符串:遍历字符串中的每个字符,识别方向和距离。
    • 更新位置:根据方向更新机器人的位置,并确保不超出网格边界。
    • 输出结果:打印机器人的最终位置。

    通过这种方式,我们可以正确地模拟机器人的移动过程,并确保其不会移出网格的边界。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 2月19日
  • 已采纳回答 2月11日
  • 创建了问题 1月13日