CCF CSP 第36次(2024.12)(1_移动_C++)

CCF CSP 第36次(2024.12)(1_移动_C++)

时间限制 : 1.0 秒
空间限制 : 512 MiB
原题链接

解题思路:

思路一:

1、解题步骤拆分:

① 数据输入:

  • 第一行输入 n(int) 和 k(int) (n代表实验场地的大小,k代表查询个数)
  • 接下来k行每行包含三个数据 x(int) y(int) str(string) ,x 和 y为机器人的初始位置,str为机器人的指令序列(fblr)

② 数据处理:

对x y进行相应的变换 (注意超出场地大小则不移动)

  • 向前移动 f
  • 向后移动 b
  • 向左移动 l
  • 向右移动 r

③ 数据输出:输出最终机器人所处场地的位置

代码实现

代码实现(思路一):
cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;

int main(int argc, char const *argv[])
{
    int n, k;
    cin >> n >> k;  // 输入实验场地的大小 n 和查询的次数 k

    int x, y;
    string str;
    // 不需要一开始就初始化 ans 数组的大小,后续使用 push_back 添加数据
    vector<vector<int>> ans;  // 用于存储每个查询的结果(每次机器人的最终位置)

    // 处理每个查询
    for (int i = 0; i < k; i++) {
        cin >> x >> y >> str;  // 输入机器人初始位置 (x, y) 和指令序列 str
        
        // 对每个指令进行处理
        for (char &s : str) {
            if (s == 'f' && y < n) y += 1;  // 'f' 表示向前移动,且不能超过场地的上限
            if (s == 'b' && y > 1) y -= 1;  // 'b' 表示向后移动,且不能低于场地的下限
            if (s == 'l' && x > 1) x -= 1;  // 'l' 表示向左移动,且不能低于场地的下限
            if (s == 'r' && x < n) x += 1;  // 'r' 表示向右移动,且不能超过场地的上限
        }
        
        // 将机器人的最终位置加入 ans 数组
        ans.push_back({x, y});
    }

    // 输出每个查询后机器人的最终位置
    for (int i = 0; i < k; i++) {
        cout << ans[i][0] << " " << ans[i][1] << endl;  // 输出第 i 个查询的最终位置
    }

    return 0;
}

欢迎大家和我沟通交流(✿◠‿◠)

相关推荐
智者知已应修善业7 小时前
【51单片机89C51及74LS273、74LS244组成】2022-5-28
c++·经验分享·笔记·算法·51单片机
Byron Loong10 小时前
【c++】为什么有了dll和.h,还需要包含lib
java·开发语言·c++
坚果派·白晓明11 小时前
【鸿蒙PC三方库移植适配框架解读系列】第一篇:Lycium C/C++ 三方库适配 — 概述与环境配置
c语言·开发语言·c++·harmonyos·开源鸿蒙·三方库·c/c++三方库
咩咦12 小时前
C++学习笔记02:cin 和 cout 输入输出
c++·学习笔记·cin·输入输出·cout
咩咦12 小时前
C++学习笔记05:引用和常引用
c++·学习笔记·引用·const·常引用
香蕉鼠片12 小时前
算法过程中不会的
开发语言·c++
阿旭超级学得完12 小时前
C++11包装器(function和bind)
java·开发语言·c++·算法·哈希算法·散列表
li星野12 小时前
位运算 & 数学 & 高频进阶九题通关(Python + C++)
c++·python·学习·算法
磊 子13 小时前
多态类原理+四种类型转换+异常处理
开发语言·c++·算法
王老师青少年编程13 小时前
csp信奥赛C++高频考点专项训练之字符串 --【回文字符串】:回文拼接
c++·字符串·csp·高频考点·信奥赛·字符串回文·回文拼接