模拟算法题练习(一)(扫雷,灌溉,回文日期)

news2024/11/25 2:32:48

 目录

模拟算法介绍:

(一、扫雷)

(二、灌溉)

(三、回文日期)

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


模拟算法介绍:

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

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

一般为了使得模拟题写的逻辑清晰一些,经常会写比较多的小函数来帮助解题,例如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;
    // 输入 n, m,  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 赋值为 9
            {
                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;
    //输入 n, m 表示 n 行 m 列

    int t; cin >> t;// 输入 t, 表示出水管的数量
    while (t--)
    {
        int x, y; cin >> x >> y;
        // 输入 x, y表示排水管的坐标
        a[x][y] = 1;
    }
    int k; cin >> k;
    // 输入 k, 表示 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;
                    // 如果 a[i][j] 是雷, 则四周都赋值为 1
                }
            }
        }
    }
    //将b复制回a
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
        {
            a[i][j] = b[i][j];
        }
    }
    int count;
    // 统计 k 分钟后, 有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;
	// 输入 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.coloradmin.cn/o/1488967.html

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

相关文章

探索Linux世界:初次接触和基本指令(文件操作)

文章目录 1.基本介绍和准备2.基本指令和Linux的基本操作3.几个重要基本指令3.1 ls - 列出文件和目录3.1.1文件的知识3.1.2 .和..文件 3.2pwd - 显示当前工作目录3.2.1路径知识 3.3 cd - 切换目录3.4 touch - 创建文件或更新时间戳3.5mkdir - 创建新目录3.6rm - 删除文件或目录3…

22.基于springboot + vue实现的前后端分离-汽车票网上预定系统(项目 + 论文PPT)

项目介绍 系统是一个B/S模式系统&#xff0c;采用Spring Boot框架&#xff0c;MySQL 数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得汽车票网上预订系统管理工作系统化、规范化。本系统的使用使管理人…

解决prettier 报错 Delete `␍`

根目录&#xff08;么有的话&#xff09;新建 .prettierrc.js配置文件 module.exports {tabWidth: 2,semi: true,printWith: 80,singleQuote: true,quoteProps: consistent,htmlWhitespaceSensitivity: strict,vueIndentScriptAndStyle: true,// 主要是最后一行endOfLine:aut…

【Quarto】Markdown导出PPT

title: “Quarto Basics” mainfont: “LXGW WenKai Mono” format: revealjs: theme: default incremental: true pptx: incremental: true html: code-fold: true beamer: incremental: true aspectratio: 169 QUARTO 这段代码是一个 YAML 头部&#xff08;front matter&…

解决NENU研究生教务系统网站“不能创建对象”等兼容性问题

本问题由吴越洋同学首先解决&#xff0c;在阅读了吴越洋同学的博客和他编写的Tempermonkey插件脚本代码后&#xff0c;完成了本项目。 吴越洋同学的博客地址为修复NENU教务系统“不能创建对象”等兼容性问题 - YorkWus Blog 吴越洋同学的插件地址为东北师范大学本科生、研究生教…

Windows10笔记本亮度调节按键失灵

操作&#xff1a;任务管理器 -> 监视器 -> 右键点击 -> 通用即插即用监视器 -> 更新驱动程序 -> 浏览我的电脑以查找我的驱动程序 -> 让我从计算机上的可用驱动程序列表中选取 -> 点击通用即插即用监视器 -> 点击关闭 -> 重启电脑。 第一步&#x…

计算复数x的余弦值计算复数x的反余弦值cmath.cos(x)cmath.acos(x)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算复数x的余弦值 计算复数x的反余弦值 cmath.cos(x) cmath.acos(x) [太阳]选择题 请问cmath.cos(x)的作用是&#xff1a; import cmath print("【执行】cmath.cos(0)") print(cm…

2.3_5 用信号量实现互斥、同步、前驱关系

文章目录 2.3_5 用信号量实现互斥、同步、前驱关系&#xff08;一&#xff09;信号量机制实现进程互斥&#xff08;二&#xff09;信号量机制实现进程同步&#xff08;三&#xff09;信号量机制实现前驱关系 总结 2.3_5 用信号量实现互斥、同步、前驱关系 我们之前学习了进程互…

MySQL学习Day25——数据库其他调优策略

一、数据库调优的措施: 1.调优的目标: (1)尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务 (2)合理的结构设计和参数调整&#xff0c;以提高用户操作的响应速度 (3)减少系统的瓶颈&#xff0c;提高MySQL数据库整体的性能; 2.如何定位调优:用户的反馈、日志…

基于Springboot的无人智慧超市管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的无人智慧超市管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

微软多兴趣召回:Octopus

Octopus: Comprehensive and Elastic User Representation for the Generation of Recommendation Candidates 背景&#xff1a; 多兴趣通道(channel)结构的多兴趣召回模型在兴趣通道数量上面存在两个问题 兴趣通道较少&#xff0c;不能充分学习到用户的多个兴趣。兴趣通道较…

力扣hot9---滑动窗口

题目&#xff1a; 先记录一下&#xff08;没想到有生之年&#xff0c;还能&#xff09;&#xff1a;其实还能优化&#xff0c;后面会讲述优化思路 思路&#xff1a; 滑动窗口的大小就是固定的&#xff0c;就是len_p。那么依次将窗口从s的最左端向右滑动。在当下的窗口中&#x…

鸿蒙开发就业前景以及发展方向分析~

鸿蒙操作系统作为华为公司自主研发的操作系统&#xff0c;已经成为当下炙手可热的话题。作为一个全新的操作系统&#xff0c;鸿蒙开发为IT行业带来了巨大的就业机会。本文将围绕鸿蒙开发的就业前景以及发展方向展开讨论。 一、鸿蒙开发就业前景 随着鸿蒙操作系统的发布&#…

Windows快速删除大量文件

直接上命令 rmdir 磁盘:\文件夹名字\ /s /q /S 表示除目录本身外&#xff0c;还将删除指定目录下的所有子目录和文件。 /Q 表示安静模式&#xff0c;删除时不需要经过确认。 特别是vue项目中的node_modules&#xff0c;删除贼快&#xff01;

【代码随想录算法训练营Day34】860.柠檬水找零;406.根据身高重建队列;452.用最少数量的箭引爆气球

❇️Day 34 第八章 贪心算法 part04 ✴️今日任务 860.柠檬水找零406.根据身高重建队列452.用最少数量的箭引爆气球 ❇️860.柠檬水找零 本题看上好像挺难&#xff0c;其实挺简单的&#xff0c;大家先尝试自己做一做。题目链接&#xff1a;https://leetcode.cn/problems/lem…

10W 音频功率放大电路芯片TDA2003,可用于汽车收音机及收录机中作音频功率放大器,内部具有短路保护和过热保护等功能

TDA2003 用于汽车收音机及收录机中作音频功率放大器。 采用 TO220B5 封装形式。 主要特点&#xff1a; ⚫ 内部具有短路保护和过热保护。内部具有地线开路、电源极性接 反和负载泄放电压反冲等保护电路。 ⚫ 输出电流大。 ⚫ 负载电阻可低至 1.6 。 …

【短时交通流量预测】基于单层BP神经网络

课题名称&#xff1a;基于单层BP神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&…

Redis核心数据结构之SDS(一)

数据结构与对象 简单动态字符串 概述 Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组&#xff0c;简称C字符串)&#xff0c;而是自己构建了一种名为简单动态字符串(Simple Dynamic String, SDS)的后向类型&#xff0c;并将SDS用作Redis的默认字符串表示。在…

算法比赛|赛制介绍| ACM, IOI赛制, OI赛制

&#x1f525;博客介绍&#xff1a; 27dCnc &#x1f3a5;系列专栏&#xff1a; <<数据结构与算法>> << 算法入门>> << C项目>> &#x1f3a5; 当前专栏: << 算法入门>> 专题 : 数据结构帮助小白快速入门算法 &#x1f4…

spring boot 字典使用,使用element-ui + vue

数据库表设计 type为1则代表字典的类型 type为2则是下拉框显示的值 id是雪花算法自动生成的 前端设计 基于vue-fast2设计 使用element-ui 异步获取数据 // 获取数据列表getDataList () {this.dataListLoading truethis.$http({url: this.$http.adornUrl(/sys/dict/list)…