当前位置: 首页 > news >正文

P10901 [蓝桥杯 2024 省 C] 封闭图形个数

在这里插入图片描述
铁子们好呀,今天博主给大家更新一道编程题!!!
题目链接如下: P10901 [蓝桥杯 2024 省 C] 封闭图形个数
好,接下来,我将从三个方面讲解这道例题。分别是

  • 题目解析
  • 算法原理
  • 代码实现

文章目录

  • 1.题目解析
  • 2.算法原理
  • 3.代码实现

1.题目解析

如下图:
在这里插入图片描述
1.从图中: 可以看出题面的意思比较简单,就是说某个数字中如果有0,4,6,9,这些数字的话,就有一个封闭图形。
如果某个数字中有8的话,则有两个封闭图形。如果是其他数字,就没有封闭图形的。
2.那大家看了博主画图分析的话,大概也懂了这题的意思了吧,通俗点说就是比较每个数的封闭图形个数,若封闭图形个数相同,则比较它们的数值大小,对它们进行升序排序。
这个题思路比较简单,就是简单的模拟题嘛。



2.算法原理

如下图所示:
在这里插入图片描述
1.还是回到刚刚那幅图,这个题的算法原理其实比较简单:
优先对封闭图形个数进行排序,如果封闭图形个数相同,再比较数字的大小进行升序排序。
2.那这个题最好的做法就是定义一个结构体类型,里面分别放的是数值的大小nums成员变量和封闭图形个数成员变量close_shapes
通过vector创建一个结构体的容器,用个循环遍历n次,在每次循环中,将用户每次输入的数字以及该数字转换后的封闭图形个数,放入结构体类实例化的对象中对应结构体成员变量numsclose_shape中去。每次循环push_back这个结构体实例化的对象到vector的容器去。
最后我们直接用sort函数对这个容器进行自定义排序,先按封闭图形升序排序,再按那个数值大小进行升序排序。
这里可能有同学会问: 不会用是sort函数自定义函数怎么办,其实这个跟我们之前在C语言期间学习的qsort函数是差不多的。
如果忘了的同学可以看一下这篇文章qsort函数的使用及模拟实现
3.当然啦!如果是实在想知道sort函数怎么用,大家也可以点击此链接来学习sort函数:sort函数的使用技巧
相信大家看了这个网站对sort函数介绍,自己也知道怎么灵活使用。

好,关于这个题的算法原理,博主就讲得差不多了,铁子们记得自己先实现这个代码逻辑,再来看看博主的代码实现的思路,看看和你有什么不同,不要直接看博主的代码实现噢,这对你们提升代码能力没帮助的,算法题只有多练才行的



3.代码实现

接下来,铁子们,可以看看博主的代码实现,里面有详细的注释,希望大家都能理解里面每一行代码的意思。
代码如下:

using namespace std;
#include <bits/stdc++.h> // 引入所有标准库头文件// 定义结构体 MM,用于存储每个数值及其对应的封闭图形个数
struct MM {int nums;          // 原来的数值int close_shapes;  // 数值对应的封闭图形个数
};// 创建一个全局的 vector 容器 vv,用于动态存储结构体 MM 的对象
vector<MM> vv;// 创建全局变量 n,表示输入的数字个数,全局变量默认初始化为 0
int n;// 定义比较函数 Cmp,用于自定义排序
bool Cmp(MM nums1, MM nums2) {// 如果两个数的封闭图形个数不同,按照封闭图形个数升序排序if (nums1.close_shapes != nums2.close_shapes) {return nums1.close_shapes < nums2.close_shapes;}// 如果封闭图形个数相同,则按数值大小升序排序return nums1.nums < nums2.nums;
}int main() {ios::sync_with_stdio(false); // 优化输入输出,关闭 C++ 和 C 的标准流同步cin.tie(0);  // 解开 cin 与 cout 的绑定,以加快 cin 输入速度cout.tie(0); // 解开 cout 绑定,以加快 cout 输出速度cin >> n; // 输入数字的个数并存入 nMM kst;   // 定义结构体变量 kst,用于暂存每个数值的属性// 遍历每个输入的数值for (int i = 1; i <= n; ++i) {int t; // 暂存输入的数值cin >> t;kst.nums = t;       // 将输入数值存入结构体成员 numskst.close_shapes = 0; // 初始化封闭图形个数为 0// 计算数值 t 的封闭图形个数while (t) {// 判断 t 的个位数是否为 0、4、6 或 9,若是,增加一个封闭图形if (t % 10 == 0 || t % 10 == 4 || t % 10 == 6 || t % 10 == 9) {++kst.close_shapes;}// 若个位数为 8,则包含两个封闭图形else if (t % 10 == 8) {kst.close_shapes += 2;}t /= 10; // 移除个位数,继续检查下一位}// 将结构体对象 kst 添加到 vector 容器 vv 中vv.push_back(kst);}// 使用自定义比较函数 Cmp 对 vv 中的数值进行排序sort(vv.begin(), vv.end(), Cmp);// 输出排序后的结果,每个数值按空格分隔for (auto val : vv) {cout << val.nums << ' ';}return 0; // 返回 0 表示程序成功执行
}

在这里插入图片描述
我们将代码拷到洛谷网站提交,也是全部AC的状态。
如图:
在这里插入图片描述

好,今天的题目讲解就到这里结束啦,如果铁子们看了上面的代码实现及注释,还有不懂的话,欢迎私信。


**当然如果大家如果觉得博主这篇文章对你刷题方面有帮助的话,可以给博主一键三连吗 **
在这里插入图片描述

在这里插入图片描述
** 谢谢大家支持!!! **

相关文章:

P10901 [蓝桥杯 2024 省 C] 封闭图形个数

铁子们好呀&#xff0c;今天博主给大家更新一道编程题&#xff01;&#xff01;&#xff01; 题目链接如下&#xff1a; P10901 [蓝桥杯 2024 省 C] 封闭图形个数 好&#xff0c;接下来&#xff0c;我将从三个方面讲解这道例题。分别是 题目解析算法原理代码实现 文章目录 1.题…...

ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)

ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法) 一、更新并安装基础软件 #切换root用户 sudo su -#更新 apt update #升级 apt upgrade#install vim apt install vim#install net-tools apt install net-tools二、安装ssh并设置…...

手机直连卫星NTN通信初步研究

目录 1、手机直连卫星之序幕 2、卫星NTN及其网络架构 2.1 NTN 2.2 NTN网络架构 3、NTN的3GPP标准化进程 3.1 NTN需要适应的特性 3.2 NTN频段 3.3 NTN的3GPP标准化进程概况 3.4 NTN的3GPP标准化进程的详情 3.4.1 NR-NTN 3.4.1.1 NTN 的无线相关 SI/WI 3.4.1.2…...

蓝桥杯c++算法学习【2】之搜索与查找(九宫格、穿越雷区、迷宫与陷阱、扫地机器人:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 搜索与查找 一、九宫格 【问题描述】 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分&#xff0c;三 …...

Android加载pdf

依赖 implementation com.squareup.okhttp3:okhttp:4.9.1 implementation com.github.barteksc:android-pdf-viewer:3.2.0-beta.1在project.build中添加该源 maven { url "https://repository.liferay.com/nexus/content/repositories/public/" }XML <LinearLa…...

IOT物联网低代码可视化大屏解决方案汇总

目录 参考来源云服务商阿里云物联网平台产品主页产品文档 开源项目DGIOT | 轻量级工业物联网开源平台项目特点项目地址开源许可 IoTGateway | 基于.NET6的跨平台工业物联网网关项目特点项目地址开源许可 IoTSharp | 基于.Net Core开源的物联网基础平台项目特点项目地址开源许可…...

Python的面向对象day7

1、什么是面向对象 面向对象称为OO&#xff0c;他通过将数据和功能封装在一个被称为‘对象’的实体中&#xff0c;来组织和管理代码。面向对象变成&#xff08;OOP&#xff09;具有四个特性&#xff0c;封装、继承、多态、抽象 优点&#xff1a;模块化、安全性高、代码重用性…...

计算机网络(11)和流量控制补充

这一篇对数据链路层中的和流量控制进行详细学习 流量控制&#xff08;Flow Control&#xff09;是计算机网络中确保数据流平稳传输的技术&#xff0c;旨在防止数据发送方发送过多数据&#xff0c;导致接收方的缓冲区溢出&#xff0c;进而造成数据丢失或传输失败。流量控制通常…...

Rust 所有权机制

Rust 所有权机制 本文示例代码地址 所有权是Rust中最独特的特性&#xff0c;它让Rust无需GC就可以保证内存安全。 什么是所有权&#xff1f; 所有权&#xff08;ownership&#xff09;是 Rust 用于如何管理内存的一组规则。所有程序都必须管理其运行时使用计算机内存的方式…...

Pwn VM writeup

国赛期间&#xff0c;做了一个很有意思的pwn题&#xff0c;顺便学了一下现在常见的pwn的板子题是什么样子的&#xff0c;这里做一下记录 Magic VM 题目逻辑 题目本身其实非常的有趣&#xff0c;它实现了一个简易流水线的功能&#xff0c;程序中包含四个结构体&#xff0c;其中三…...

LSTM(长短期记忆网络)详解

1️⃣ LSTM介绍 标准的RNN存在梯度消失和梯度爆炸问题&#xff0c;无法捕捉长期依赖关系。那么如何理解这个长期依赖关系呢&#xff1f; 例如&#xff0c;有一个语言模型基于先前的词来预测下一个词&#xff0c;我们有一句话 “the clouds are in the sky”&#xff0c;基于&…...

机器学习 贝叶斯公式

这是条件概率的计算公式 &#x1d443;(&#x1d434;|&#x1d435;)&#x1d443;(B|A)&#x1d443;(&#x1d434;)/&#x1d443;(&#x1d435;) 全概率公式 &#x1d443;(&#x1d435;)&#x1d443;(&#x1d435;|&#x1d434;)&#x1d443;(&#x1d434;)&am…...

Scala-注释、标识符、变量与常量-用法详解

Scala Scala-变量和数据类型-用法详解 Scala一、注释二、标识符规范三、变量和常量1. 变量&#xff08;var&#xff09;2. 常量&#xff08;val&#xff09;3. 类型推断与显式声明4. var 和 val 的区别5. Scala与Java对比Tips&#xff1a; 各位看客老爷万福金安&#xff0c;一键…...

大数据学习14之Scala面向对象--至简原则

1.类和对象 1.1基本概念 面向对象&#xff08;Object Oriented&#xff09;是一种编程思想&#xff0c;面向对象主要是把事物给对象化&#xff0c;包括其属性和行为。面向对象编程更贴近实际生活的思想&#xff0c;总体来说面向对象的底层还是面向过程&#xff0c;面向过程抽象…...

docker 安装之 windows安装

文章目录 1: 在Windows安装Docker报19044版本错误的时候&#xff0c;请大家下载4.24.1之前的版本&#xff08;含4.24.1&#xff09;2: Desktop-WSL kernel version too low3: docker-compose 安装 (v2.21.0) 1: 在Windows安装Docker报19044版本错误的时候&#xff0c;请大家下载…...

JS 实现游戏流畅移动与按键立即响应

AWSD 按键移动 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box1 {width: 400px;height: 400px;background: yellowgreen;margin: 0 auto;position: relative;}.box2 {width: 50px;height:…...

LabVIEW大数据处理

在物联网、工业4.0和科学实验中&#xff0c;大数据处理需求逐年上升。LabVIEW作为一款图形化编程语言&#xff0c;凭借其强大的数据采集和分析能力&#xff0c;广泛应用于实时数据处理和控制系统中。然而&#xff0c;在面对大数据处理时&#xff0c;LabVIEW也存在一些注意事项。…...

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具视频汇聚技术在智慧安防监控中的应用与优势

随着信息技术的快速发展和数字化时代的到来&#xff0c;安防监控领域也在不断进行技术创新和突破。NVR管理平台EasyNVR作为视频汇聚技术的领先者&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;展现出了在安防监控领域巨大的应用潜力和价值。本文将详细介绍Easy…...

海思3403对RTSP进行目标检测

1.概述 主要功能是调过live555 testRTSPClient 简单封装的rtsp客户端库&#xff0c;拉取RTSP流&#xff0c;然后调过3403的VDEC模块进行解码&#xff0c;送个NPU进行目标检测&#xff0c;输出到hdmi&#xff0c;这样保证了开发没有sensor的时候可以识别其它摄像头的视频流&…...

Vue之插槽(slot)

插槽是vue中的一个非常强大且灵活的功能&#xff0c;在写组件时&#xff0c;可以为组件的使用者预留一些可以自定义内容的占位符。通过插槽&#xff0c;可以极大提高组件的客服用和灵活性。 插槽大体可以分为三类&#xff1a;默认插槽&#xff0c;具名插槽和作用域插槽。 下面…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...