模拟算法题练习(一)

模拟算法介绍:

模拟算法通过模拟实际情况来解决问题,一般容易理解但是实现起来比较复杂,有很多需要注意的细节,或者是一些所谓很“麻模“的东西。

模拟题一般不涉及太难的算法,一般就是由较多的简单但是不好处理的部分组成的,考察选手的细心程度和整体思维逻辑。

一般为了使得模拟题写的逻辑清晰一些,经常会写比较多的小函数来帮助解题,例如int和string的相互转换、回文串的判断日期的转换、各种特殊条件的判断等等。

(一、扫雷)

用户登录

题目描述
在一个 n 行 m 列的方格图上有一些位置有地雷,另外一些位置为空。请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷
输入描述
输入的第一行包含两个整数 n,m。
第 2 行到第 n +1行每行包含 m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 0,表示这一格没有地雷。如果对应的整数为 1,表示这格有地雷。
其中,1 <= n,m <= 100 分钟后还是在当天
输出描述
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出9。

输入输出样例

输入

3 4

0 1 0 0

1 0 1 0

0 0 1 0

输出

2 9 2 1

9 4 9 2

1 3 9 2

思路:

首先开辟两个二维数组mp和ans,mp用二维数组接收输入样例,ans来确定是否是雷或确定雷的数量。遍历整个数组,判断是否是雷(if(mp[i][j] == 1)),如果是,则ans=9;如果不是,遍历周围周围八格是否有雷(if(mp[_i])[_j] == 1),如果是则ans++;

#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int mp[N][N], ans[N][N];int main()
{int n,m ;cin >> n >> m;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){cin >> mp[i][j];}}for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){if(mp[i][j] == 1){ans[i][j] = 9;}else{//遍历周围八格是否有雷,有雷则ans++for(int _i = max(1, i - 1); _i <= min(n, i + 1); ++_i){for(int _j = max(1, j - 1); _j <= min(m, j + 1); ++_j){if(mp[_i][_j]) ans[i][j]++;}}}}}for(int i = 1; i <= n; ++i){for(int j = 1; j <= m; ++j){cout << ans[i][j] << ' ';}cout << '\n';}return 0;
}

(二、灌溉)

用户登录

题目描述
小蓝负责花园的灌溉工作。
花园可以看成一个n 行 m 列的方格图形。中间有一部分位置上安装有出水管。
小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。
每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。
给定花园水管的位置,请问 k分钟后,有多少个方格被灌溉好?
输入描述
输入的第一行包含两个整数 n,m。
第二行包含一个整数 t,表示出水管的数量。
接下来t行描述出水管的位置,其中第之行包含两个数 r,c表示第,行第 c列有一个排水管。
接下来一行包含一个整数 k。
其中,1<= n,m<= 100,1<=t<= 10,1<=k<= 100。
输出描述
输出一个整数,表示答案。

输入输出示例

输入:

3 6 2 2 2 3 4 1

输出:

9

#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int a[N][N], b[N][N];int main()
{int n, m; cin >> n >> m;int t; cin >> t;while (t--){int x, y; cin >> x >> y;a[x][y] = 1;}int k; cin >> k;while (k--){for (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j){if (a[i][j]){if (a[i][j])b[i][j] = b[i - 1][j] = b[i + 1][j] = b[i][j - 1] = b[i][j + 1] = 1;}}}}//将b复制回afor (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j){a[i][j] = b[i][j];}}int count;for (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j){if (a[i][j] == 1)count++;}}cout << count;return 0;
}

(三、回文日期)

用户登录

题目描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd”的格式写成一个8位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202即2021年12月2日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA型的回文日期。对此小明也不认同,因为大约 100年后就能遇到下一个ABABBABA型的回文日期:21211212即2121年12月12日。算不上“千年一遇”, 顶多算“千年两遇”。
给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。
输入描述
输入包含一个八位整数 N,表示日期。
对于所有评测用例,10000101<N<89991231,保证 N 是一个合法日期的 8 位数表示。
输出描述
输出两行,每行1个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。

输入输出样例:

输入:

20200202

输出

20211202 21211212

有一说一这题大佬的题解是真的强

编写这么几个函数:

1、从int转换为指定位数的string的函数

2、从string转换为int的函数

3、判断闰年的函数

4、判断日期是否合法的函数
5、判断字符串是否是回文的函数

6、判断字符串是否是ABABBABA型回文的函数

#include<bits/stdc++.h>
using namespace std;// 将字符串转换为数字
int s2i(string s)
{int res = 0;for (const auto& i : s)res = res * 10 + i - '0';// 通过字符与'0'的差值来得到对应的数字,并累加到结果中 return res;
}// 将整数转换为指定宽度的字符串 
string i2s(int x, int w)
//   要被转换的整数, 转换的位数
{string res;while (x)res += (x % 10) + '0', x /= 10;// 取x的个位数,并转换为字符,添加到结果字符串中,然后x除以10 while (res.length() < w)res += '0';// 当结果字符串的长度小于指定的位数时,循环执行reverse(res.begin(), res.end());return res;
}// 判断是否为闰年  
bool isLeapYear(int year)
{return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}// 判断日期是否合法
bool isok(int year, int month, int day)
{int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (isLeapYear(year))days[2] = 29;//闰年2月29天return day <= days[month];
}// 判断是否为回文
bool isPa(string s)
{for (int i = 0; i < s.length() / 2; ++i){if (s[i] != s[s.length() - 1 - i])return false;如果前后字符不相等,则不是回文  }return true;
}//判断是否是ABBA型回文
bool isPa2(string s)
{if (isPa(s))return false;return s[0] == s[2] && s[1] == s[3];
}int main()
{string s; cin >> s;int year = s2i(s.substr(0, 4)), month = s2i(s.substr(4, 2)), day = s2i(s.substr(6, 2));// 分割字符串为对应的年, 月, 日bool ans1 = false, ans2 = false;// 定义两个标志变量,用于标记是否找到了回文和ABBA型日期  for (int i = year; i <= 9999; ++i)//遍历年份{for (int j = 1; j <= 12; ++j)//遍历月份{if (i == year && j < month)continue;// 如果是是当前年份且月份小于输入的月份,则跳过  for (int k = 1; k <= 31; ++k)//遍历天数{if (i == year && j == month && k <= day)continue;// 如果是当前年份且是当前月份且日小于等于输入的日,则跳过 if (!isok(i, j, k))continue;// 如果不合法,则跳过string date = i2s(i, 4) + i2s(j, 2) + i2s(k, 2);// 如果还没有找到回文日期且当前日期是回文,则输出并标记已找到if (!ans1 && isPa(date)){cout << date << '\n';ans1 = true;}// 如果还没有找到ABBA型日期且当前日期是ABBA型,则输出并标记已找到if (!ans2 && isPa2(date)){cout << date << '\n';ans2 = true;}}}}return 0;
}

今天就先到这了!!!

看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注!

你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】最小生成树—Prim算法与Kruskal算法

Prim算法和Kruskal算法都是解决最小生成树问题的经典算法。最小生成树是原图的最小连通子图&#xff0c;它包含原图的全部结点&#xff0c;且保持图连通的所有边代价和最小。一个连通图可能有多个最小生成树。 一、Prim算法 含义 Prim算法&#xff0c;也被称为普里姆算法&…

基于移动端的食堂助餐在线点餐配送系统 uniapp微信小程序

本文从管理员、老人、配送员、食堂商家的功能要求出发&#xff0c;养老助餐管理系统小程序中的功能模块主要是实现老人、配送员、食堂商家、食堂大厅、预约选座、餐号信息、美食信息、美食订单、订单信息、订单配送、订单评价、老人食堂、下单信息、饮食分析。经过认真细致的研…

C语言可以干些什么?C语言主要涉及哪些IT领域?

C语言可以干些什么&#xff1f;C语言主要涉及哪些IT领域&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家…

Docker技术概论(1):Docker与虚拟化技术比较

Docker技术概论&#xff08;1&#xff09; Docker与虚拟化技术比较 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…

ABAP 发送带EXCEL邮件

前言 没啥特殊需求&#xff0c;就是有个库龄报表用户想整邮件发送 实现 用的最简单的XLS文件作为excel附件发送出去 观察XLS文件的纯文本格式&#xff0c;每列之间用TAB制表符分隔&#xff0c;每行之间用回车符分隔 思路也比较明确&#xff0c;在SAP中实现这种格式&#xf…

.Net利用Microsoft.Extensions.DependencyInjection配置依赖注入

一、概述 为了让接口程序更加模块化和可测试,采用依赖注入的方式调用接口方法。 二、安装Microsoft.Extensions.DependencyInjection 在NuGet里面搜索Microsoft.Extensions.DependencyInjection,并进行安装。 三、代码编写 3.1 创建Service 实现类 /*****************…

Doccano 修复 spacy.gold 的bug

引言 最初只是想把Doccano标注的数据集转换成BIO(类似conll2003数据集)的标注格式&#xff1b; 摘要 可先阅读一下教程&#xff1a;【已解决】关于如何将Doccano标注的文本转换成NER模型可以直接处理的CoNLL 2003格式 装包:pip install doccano-transformer 报错信息 运行…

【前端素材】推荐优质后台管理系统DAdmin平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的管理界面&#xff0c;通常由管理员和工作人员使用。它提供了访问和控制网站或应用程序后台功能的工具和界面&#xff0c;使其能够管理用户、内容、数据和其他各种功能。 2、功能需求 后台管理系…

记录 关于navicat连接数据库报错1045的问题

重装数据库之后就连接不上了 报错1045 而网上的解决方案大都是更改数据库密码&#xff0c;但是我在第一步就被卡住无法更改密码&#xff0c;输入指令也报错&#xff0c;检查的环境变量也没错&#xff0c;经过长时间的试错终于找到解决了办法 解决办法 删除data文件夹 如果无法…

Python:练习:输出int值a占b的百分之几。例如:输入1和4,输出:25%。

案例&#xff1a; 输出int值a占b的百分之几。例如&#xff1a;输入1和4&#xff0c;输出&#xff1a;25%。 思考&#xff1a; 所有的一步步思考&#xff0c;最后综合起来。 首先&#xff0c;确定 输出&#xff0c;那么就用input&#xff0c;而且是int值&#xff0c;所以肯定…

C++设计模式_创建型模式_工厂方法模式

目录 C设计模式_创建型模式_工厂方法模式 一、简单工厂模式 1.1 简单工厂模式引入 1.2 简单工厂模式 1.3 简单工厂模式利弊分析 1.4 简单工厂模式的UML图 二、工厂方法模式 2.1 工厂模式和简单工厂模式比较 2.2 工厂模式代码实现 2.3 工厂模式UML 三、抽象工厂模式 3.1 战斗场景…

MDS300-16-ASEMI整流模块MDS300-16参数、封装、尺寸

编辑&#xff1a;ll MDS300-16-ASEMI整流模块MDS300-16参数、封装、尺寸 型号&#xff1a;MDS300-16 品牌&#xff1a;ASEMI 封装&#xff1a;M25 最大重复峰值反向电压&#xff1a;1600V 最大正向平均整流电流(Vdss)&#xff1a;300A 功率(Pd)&#xff1a;大功率 芯片…

Flink——芒果TV的实时数仓建设实践

目录 一、芒果TV实时数仓建设历程 1.1 阶段一&#xff1a;Storm/Flink JavaSpark SQL 1.2 阶段二&#xff1a;Flink SQLSpark SQL 1.3 阶段三&#xff1a;Flink SQLStarRocks 二、自研Flink实时计算调度平台介绍 2.1 现有痛点 2.2 平台架构设计 三、Flink SQL实时数仓分…

面试笔记系列三之spring基础知识点整理及常见面试题

目录 如何实现一个IOC容器? 说说你对Spring 的理解&#xff1f; 你觉得Spring的核心是什么&#xff1f; 说一下使用spring的优势&#xff1f; Spring是如何简化开发的&#xff1f; IOC 运行时序 prepareRefresh() 初始化上下文环境 obtainFreshBeanFactory() 创建并…

Linux系统加固:如何有效管理系统账号

Linux系统加固&#xff1a;如何有效管理系统账号 1.1 口令重复次数限制1.2 避免系统存在uid相同的账号1.3 空密码的帐户1.4 口令复杂度1.5 口令生存期1.6 登录失败次数锁定策略 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Linux系统中…

为什么软考报名人数越来越多?

2020年软考报名人数404666人&#xff0c;广东省报考人数超过14万人。 ●2021年软考通信考试报名人数突破100万人&#xff0c;估计软考有90多万。 ●2022年软考通信考试共129万人&#xff0c;估计软考占了120多万人。 ●2023年软考具体报名人数没有公布&#xff0c;但工业和信…

【AI+应用】aliyun的EMO图生视频模型引起的思考如何做AI数字人

昨天2 月 29 日消息&#xff0c;2 月 28 日&#xff0c;阿里巴巴集团智能计算研究院日前上线了一款新的 AI 图片 - 音频 - 视频模型技术 EMO&#xff0c;官方称其为 " 一种富有表现力的音频驱动的肖像视频生成框架 "。据悉&#xff0c;用户只需要提供一张照片和一段任…

springboot235基于SpringBoot的房屋交易平台的设计与实现

房屋交易平台设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互…

死记硬背spring bean 的生命周期

1.bean的生命周期 我们平常经常使用类似于new Object()的方式去创建对象&#xff0c;在这个对象没有任何引用的时候&#xff0c;会被gc给回收掉。而对于spring而言&#xff0c;它本身存在一个Ioc容器&#xff0c;就是用来管理对象的&#xff0c;而对象的生命周期也完全由这个容…

性能测试-反编译jar

方法一&#xff0c;使用jd-gui 1、官网下载&#xff1a;Java Decompiler 2、下载mac版本后&#xff0c;解压&#xff0c;如下所示&#xff1a; 双击 JD_GUI&#xff0c;提示错误&#xff0c;如下所示&#xff1a; 已经安装了java 17&#xff0c;是java 1.8以上版本&#xff0…