【算法讲解】模拟算法介绍和题目推荐

1.模拟简介

    在现实生活中,计算机很难直接去解决实际问题,但是如果把实际问题建模成数学问题,就会大大地方便计算机来“理解”和“解决”。

    有一些题目并不需要太复杂的思路,而只要根据题目的介绍,根据一定的时间,逻辑顺序模拟题目的“指令”就行了。但这类题目有时会有大量的细节需要注意。所以完成模拟题时,需要有足够的耐心。

2.各种类型的模拟

2.1.直接模拟题

    这类模拟题大多没有什么含金量,直接根据题目给的规则模拟就行了。只需要多注意细节即可。

· 洛谷P1042 [NOIP2003 普及组] 乒乓球 ———— 戳这查看题目
· 洛谷P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 ———— 戳这查看题目
· 洛谷P1067 [NOIP2009 普及组] 多项式输出 ———— 戳这查看题目
· 洛谷P1786 帮贡排序 ———— 戳这查看题目

2.2.走迷宫/坐标偏移

    这类模拟题大多涉及到坐标的变化,实际难度也不高。在处理坐标时,有两个小技巧:

  1. 使用数组存储坐标偏移量。
int p[][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; // 上下左右

int dx[] = {0, 0, -1, 1}; // 和上面等效的写法
int dy[] = {-1 , 1, 0, 0};

int p[][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}, {-1, -1}, {1, -1}, {-1, 1}, {1, 1}}; // 上下左右,上左,上右,下左,下右

int dx[] = {0, 0, -1, 1, -1, 1, -1, 1}; // 和上面等效的写法
int dy[] = {-1 , 1, 0, 0, -1, -1, 1, 1};
  1. 将存储地图的数组设置为全局变量,这样可以尽量避免判断边界问题。如果需要判断边界,可以这么做:(以四个方向,地图长n,宽m为例)
for (int i = 0; i < 4; i++){
    int px = dx[i] + nowx, py = dy[i] + nowy;
    if (px >= 1 && px <= n && py <= 1 && py >= m/*其它判断条件,例如没有走过*/){
        // 执行语句
    }
}

· 洛谷P2670 [NOIP2015 普及组] 扫雷游戏 ———— 戳这查看题目
· 洛谷P1086 [NOIP2004 普及组] 花生采摘 ———— 戳这查看题目
· 洛谷P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two ———— 戳这查看题目
· 洛谷P11228 [CSP-J 2024] 地图探险 ———— 戳这查看题目

2.3.字符串模拟

    因为涉及到了字符串的处理,所以难度要偏高(其实也没高到哪去)。只需要熟练运用字符串相关函数即可。

· 洛谷P1098 [NOIP2007 提高组] 字符串的展开 ———— 戳这查看题目
· 洛谷P1079 [NOIP2012 提高组] Vigenère 密码 ———— 戳这查看题目
· 洛谷B3843 [GESP202306 三级] 密码合规 ———— 戳这查看题目

2.4.找规律型模拟

    这种类型的题就有点难了,可以画图以加深理解,找到规律。

· 洛谷P1563 [NOIP2016 提高组] 玩具谜题 ———— 戳这查看题目
· 洛谷P4924 [1007] 魔法少女小Scarlet ———— 戳这查看题目
· 洛谷P1065 [NOIP2006 提高组] 作业调度方案 ———— 戳这查看题目
· 洛谷P2239 [NOIP2014 普及组] 螺旋矩阵 ———— 戳这查看题目

喜欢就订阅此专辑吧!

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝胖子教编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值