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

用C++模拟堆宝塔游戏:PTA L2-045题解与保姆级代码逐行解析

用C模拟堆宝塔游戏PTA L2-045题解与保姆级代码逐行解析堆宝塔游戏是一个有趣的逻辑挑战它不仅能锻炼编程思维还能帮助我们深入理解数据结构中的栈操作。本文将带你从零开始用C实现这个游戏并逐行解析代码逻辑让你彻底掌握解题思路。1. 游戏规则与算法设计堆宝塔游戏的核心在于如何按照特定规则将彩虹圈堆叠成宝塔。游戏使用两根柱子A柱用于构建宝塔B柱作为临时存放区。规则可以概括为以下几个步骤初始状态A柱和B柱都为空第一个彩虹圈直接放入A柱作为第一座宝塔的基座后续彩虹圈处理如果当前彩虹圈直径小于A柱顶部彩虹圈直接放入A柱否则检查B柱如果B柱为空或当前彩虹圈直径大于B柱顶部彩虹圈放入B柱否则将A柱当前宝塔作为成品保存然后将B柱中所有大于当前彩虹圈的圈移到A柱最后放入当前彩虹圈这个规则实际上模拟了双栈操作A柱和B柱都可以用栈结构来实现。在C中我们可以使用vector来模拟栈的行为。2. 数据结构选择与初始化为了实现这个游戏我们需要选择合适的数据结构。以下是我们的设计思路#include bits/stdc.h using namespace std; int main() { vectorvectorint res; // 存储所有完成的宝塔 vectorint a, b; // a代表A柱b代表B柱 int n; cin n; // 彩虹圈数量 // 游戏主逻辑将在这里实现 return 0; }这里我们使用了vectorvectorint res存储所有完成的宝塔vectorint a模拟A柱vectorint b模拟B柱提示使用vector的back()方法可以方便地获取栈顶元素push_back()和pop_back()则实现了栈的入栈和出栈操作。3. 核心算法实现让我们逐步实现游戏的核心逻辑。我们将处理每个彩虹圈的输入并根据游戏规则进行操作while(n--) { int x; cin x; // 读取当前彩虹圈直径 if(a.empty()) { a.push_back(x); // 如果A柱为空直接放入 } else if(x a.back()) { a.push_back(x); // 比A柱顶部小直接放入 } else if(b.empty() || x b.back()) { b.push_back(x); // B柱为空或比B柱顶部大放入B柱 } else { res.push_back(a); // 将A柱当前宝塔作为成品保存 a.clear(); // 清空A柱 // 将B柱中所有大于当前彩虹圈的圈移到A柱 while(!b.empty() b.back() x) { a.push_back(b.back()); b.pop_back(); } a.push_back(x); // 最后放入当前彩虹圈 } }这段代码完整实现了游戏规则每个条件判断对应游戏规则中的一个分支。特别需要注意的是最后一个else块它处理了最复杂的情况当当前彩虹圈既不能放入A柱也不能放入B柱时我们需要将A柱当前宝塔保存为成品清空A柱将B柱中所有大于当前彩虹圈的圈移到A柱最后将当前彩虹圈放入A柱4. 收尾处理与结果输出当所有彩虹圈处理完毕后我们还需要处理A柱和B柱中剩余的彩虹圈if(!a.empty()) res.push_back(a); // 将A柱剩余宝塔保存 if(!b.empty()) res.push_back(b); // 将B柱剩余彩虹圈作为宝塔保存 int mx 0; for(auto c : res) { mx max(mx, (int)c.size()); // 找出最高的宝塔层数 } cout (int)res.size() mx; // 输出宝塔数量和最高层数这部分代码完成了检查并保存A柱和B柱中剩余的宝塔遍历所有宝塔找出层数最多的一个输出最终结果宝塔总数和最高宝塔层数5. 完整代码与测试案例让我们整合所有代码并提供一个测试案例#include bits/stdc.h using namespace std; int main() { vectorvectorint res; vectorint a, b; int n; cin n; while(n--) { int x; cin x; if(a.empty()) { a.push_back(x); } else if(x a.back()) { a.push_back(x); } else if(b.empty() || x b.back()) { b.push_back(x); } else { res.push_back(a); a.clear(); while(!b.empty() b.back() x) { a.push_back(b.back()); b.pop_back(); } a.push_back(x); } } if(!a.empty()) res.push_back(a); if(!b.empty()) res.push_back(b); int mx 0; for(auto c : res) { mx max(mx, (int)c.size()); } cout (int)res.size() mx; return 0; }测试输入11 10 8 9 5 12 11 4 3 1 9 15预期输出4 5这个测试案例对应题目中的样例输出表示共堆出了4座宝塔最高的有5层。6. 算法复杂度分析让我们分析一下这个算法的时间和空间复杂度操作时间复杂度空间复杂度读取输入O(n)O(1)主循环O(n)O(n)B柱转移操作最坏O(n)-结果统计O(m) (m为宝塔数量)-总体复杂度时间复杂度O(n²)最坏情况下每个元素可能需要移动多次空间复杂度O(n)需要存储所有彩虹圈虽然最坏情况下时间复杂度是O(n²)但对于题目给定的n≤1000的限制这个复杂度是完全可接受的。7. 常见错误与调试技巧在实现这个算法时有几个常见的陷阱需要注意边界条件处理第一个彩虹圈必须直接放入A柱最后必须检查A柱和B柱是否有剩余宝塔栈操作顺序在转移B柱元素到A柱时必须确保先放入较大的元素清空A柱前必须先将其保存为成品比较逻辑注意比较是严格小于还是小于等于确保所有条件分支都被正确处理调试技巧可以添加临时打印语句跟踪A柱和B柱的状态变化对于小规模输入可以手动模拟算法执行过程特别注意当B柱不为空时的处理逻辑8. 算法优化思路虽然当前实现已经足够高效但我们还可以考虑一些优化方向减少不必要的拷贝使用移动语义来转移宝塔而不是拷贝预分配vector空间以减少动态扩容开销更高效的数据结构如果性能是关键可以考虑使用原生数组或更底层的结构对于特定场景可以尝试并行处理代码重构将核心逻辑封装成函数提高代码可读性添加更多注释和文档说明然而对于PTA考试和大多数应用场景当前的实现已经足够优秀过度优化可能会降低代码的可读性和可维护性。

相关文章:

用C++模拟堆宝塔游戏:PTA L2-045题解与保姆级代码逐行解析

用C模拟堆宝塔游戏:PTA L2-045题解与保姆级代码逐行解析 堆宝塔游戏是一个有趣的逻辑挑战,它不仅能锻炼编程思维,还能帮助我们深入理解数据结构中的栈操作。本文将带你从零开始,用C实现这个游戏,并逐行解析代码逻辑&a…...

【免费下载】 摩擦磨损仿真Archard模型 - FORTRAN子程序中文注释版:加速您的科研与工程项目

摩擦磨损仿真Archard模型 - FORTRAN子程序中文注释版:加速您的科研与工程项目 【下载地址】摩擦磨损仿真archard模型-FORTRAN子程序中文注释版 本仓库提供了一款专为摩擦磨损分析设计的Umeshmotion子程序模型,采用经典的Archard模型实现。此资源针对工程…...

别再手动画图了!用Graphviz + Python自动生成流程图,效率提升10倍

用PythonGraphviz实现自动化图表生成:告别低效手绘时代 你是否曾在PPT中反复调整箭头位置,只为让一张流程图看起来更专业?或是花半小时拖拽图形,却发现某个节点的颜色需要全局修改?在技术文档、系统架构设计或算法可视…...

Win10显示器关闭就锁屏?一个注册表键值让你告别烦人锁屏(附详细路径)

Win10显示器关闭后自动锁屏的终极解决方案:注册表深度优化指南 1. 问题背景与用户痛点 每当我们在Windows 10系统中设置显示器自动关闭以节省能源时,常常会遇到一个令人困扰的现象:显示器关闭后不久,系统就会自动进入锁屏状态。这…...

IL-4诱导的M2INF巨噬细胞在二型免疫疾病及感染防御中的机制研究

摘要郑世进课题组通过深入研究IL-4诱导的M2INF巨噬细胞,揭示了其产生机制主要涉及糖代谢途径的重编程和组蛋白H3K4位点甲基化修饰的改变。这一发现为理解二型免疫疾病的发生发展提供了新的视角,并为相关疾病的治疗策略提供了理论依据。通过在小鼠模型&am…...

别再死记硬背One-Hot了!用Python从零实现一个Word2Vec词嵌入模型(附完整代码)

从零构建Word2Vec:用Python实现词嵌入的实战指南 词嵌入技术早已成为自然语言处理的基石,但大多数教程要么停留在理论层面,要么直接调用现成的库函数。本文将带你用纯Python和NumPy从零实现一个Word2Vec模型,彻底掌握词向量生成的…...

终极指南:3种方法快速部署Windows官方包管理器Winget

终极指南:3种方法快速部署Windows官方包管理器Winget 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/wi/w…...

【亲测免费】 探索光谱与色谱数据分析的新利器:CARS-PLS MATLAB 源码

探索光谱与色谱数据分析的新利器:CARS-PLS MATLAB 源码 【下载地址】CARS-PLS用于光谱数据或色谱数据变量选择的MATLAB源码 本仓库提供了一个用于光谱数据或色谱数据变量选择的 MATLAB 源码,基于 CARS-PLS(Competitive Adaptive Reweighted S…...

告别触摸漂移!手把手教你为ESP32和XPT2046电阻屏制作LVGL校准工具

ESP32电阻屏精准触控实战:从硬件校准到LVGL交互优化 电阻式触摸屏在嵌入式设备中广泛应用,但精度问题一直困扰着开发者。当你在ESP32上连接XPT2046触摸控制器时,是否遇到过点击位置漂移、响应不准确的烦恼?本文将带你深入解决这一…...

保姆级教程:用ESP32 AT固件实现手机蓝牙配对,从编译到连接一次搞定

ESP32蓝牙开发实战:从固件编译到手机配对的完整指南 在物联网设备开发中,蓝牙连接是最基础也最常用的功能之一。ESP32作为一款高性价比的Wi-Fi/蓝牙双模芯片,凭借其出色的性能和丰富的开发资源,已经成为智能家居、可穿戴设备等领域…...

CVBS转BT656/BT601,能成熟、应用广泛的低功耗视频解码器

GM7150是一款低功耗、9位NTSC/PAL视频解码器,由成都振芯科技股份有限公司生产。该芯片采用CMOS工艺,通过IC总线与PC或DSP相连构成应用系统。它内部包含1个模拟处理通道,能实现CVBS、S-Video视频信号源选择、A/D转换、自动钳位、自动增益控制(…...

Windows热键冲突终结者:Hotkey Detective深度解析与实战指南

Windows热键冲突终结者:Hotkey Detective深度解析与实战指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 想…...

探索高效存储:STM32F4系列SD卡读写与FATFS文件系统移植

探索高效存储:STM32F4系列SD卡读写与FATFS文件系统移植 【下载地址】SD卡读写与FATFS文件系统移植SPI模式 本仓库提供了一个完整的SD卡读写程序,并成功移植了FATFS文件系统,适用于STM32F4系列微控制器。通过SPI模式,您可以轻松实现…...

Pydantic序列化避坑大全:从‘按声明类型序列化’到灵活exclude/include的5个常见误区

Pydantic序列化深度避坑指南:从类型陷阱到安全控制的实战解析 深夜调试代码时,你是否遇到过这样的场景:明明在内存中完整的对象,通过API返回给前端时却莫名丢失了关键字段?或者当你在日志中打印包含敏感信息的模型时&a…...

从外卖配送范围到跨国航线规划:Geopy距离计算的3个实战场景与避坑经验

从外卖配送范围到跨国航线规划:Geopy距离计算的3个实战场景与避坑经验 在数字化浪潮席卷各行各业的今天,地理距离计算已成为许多商业应用的核心技术组件。无论是外卖小哥的手机App上闪烁的配送范围提示,还是国际物流系统中精确到米的航线规划…...

【亲测免费】 GeoMatch_src:基于边缘的模板匹配技术

GeoMatch_src:基于边缘的模板匹配技术 【下载地址】GeoMatch_srcVS2015OpenCV3.3版说明文档 本仓库提供了**GeoMatch_src**项目的更新版本,专为使用Visual Studio 2015和OpenCV 3.3环境的开发者设计。GeoMatch_src是一个基于边缘的模板匹配技术实现&…...

如何零风险升级SillyTavern:保护角色数据完整的终极指南

如何零风险升级SillyTavern:保护角色数据完整的终极指南 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 还在为SillyTavern版本更新而提心吊胆吗?担心升级过程中珍贵…...

突破性效率工具:3步实现Draw.io Mermaid智能绘图完整方案

突破性效率工具:3步实现Draw.io Mermaid智能绘图完整方案 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 还在为传统拖拽式绘图效率低下而烦恼吗&#xff1…...

【亲测免费】 TSK UF系列Prober操作手册下载

TSK UF系列Prober操作手册下载 【下载地址】TSKUF系列Prober操作手册下载 本仓库提供TSK UF系列Prober的操作手册下载,具体为UF190/UF200系列的manual。TSK UF系列Prober是半导体厂针测的重要设备,该手册详细介绍了设备的各项功能、操作步骤以及维护保养…...

LeaguePrank终极指南:3分钟掌握英雄联盟个人信息自定义

LeaguePrank终极指南:3分钟掌握英雄联盟个人信息自定义 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否厌倦了英雄联盟中千篇一律的个人资料展示?想要在召唤师峡谷中展示独特的自我形象&#xff…...

ThinkPad终极散热指南:TPFanCtrl2风扇控制完全教程

ThinkPad终极散热指南:TPFanCtrl2风扇控制完全教程 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾被ThinkPad风扇的突然加速打扰工作专注&#xf…...

【免费下载】 美国各州区域图-shp格式

美国各州区域图-shp格式 【下载地址】美国各州区域图-shp格式 本资源库提供了一份详尽的美国各州区域图数据,以流行的Shapefile(shp格式)进行封装。Shapefile是一种广泛应用于地理信息系统(GIS)的矢量数据格式&#xf…...

【免费下载】 探索SFP模块的奥秘:SFP-I2C工具推荐

探索SFP模块的奥秘:SFP-I2C工具推荐 项目介绍 在现代网络通信中,SFP(Small Form-factor Pluggable)模块扮演着至关重要的角色。这些模块通过I2C接口提供了丰富的信息,包括制造商、功能支持以及诊断数据等。然而&#x…...

微流控与图像引导技术实现单细胞谱系追踪与动态操控

1. 项目概述:当单细胞遇见微流控与图像引导在生命科学的前沿探索中,单细胞分析正以前所未有的精度揭示着细胞异质性的奥秘。然而,一个长期困扰研究者的难题是:我们如何不仅仅知道一个细胞在某个时间点的“快照”,还能追…...

Adobe-GenP 3.0:5分钟解锁Adobe全系列软件的终极秘籍

Adobe-GenP 3.0:5分钟解锁Adobe全系列软件的终极秘籍 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP 3.0是一款专为Adobe Creative Cloud系列…...

【免费下载】 探索高效CAN通信:PCAN PRO/PRO FD USB2CAN固件实现

探索高效CAN通信:PCAN PRO/PRO FD USB2CAN固件实现 项目介绍 PCAN PRO/PRO FD USB2CAN固件实现是一个专为基于STM32F4的廉价硬件设计的开源项目。该项目旨在为使用STM32F407/405开发板的用户提供一个高效、稳定的USB2CAN通信解决方案。通过该固件,用户可…...

明日方舟玩家必备:MAA助手如何帮你自动完成每日任务?

明日方舟玩家必备:MAA助手如何帮你自动完成每日任务? 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: h…...

【免费下载】 解锁潜能,尽在掌握:深入探索VMware17 Unlocker工具

解锁潜能,尽在掌握:深入探索VMware17 Unlocker工具 【下载地址】VMware17Unlocker解锁工具附用法 本仓库提供了一个用于解锁VMware17的工具——VMware17 Unlocker。该工具可以帮助用户解锁VMware17中的某些限制,使其能够更好地使用虚拟机功能…...

【亲测免费】 ImageNet标签文件及读取脚本:加速您的计算机视觉研究

ImageNet标签文件及读取脚本:加速您的计算机视觉研究 【下载地址】ImageNet标签文件及读取脚本 ImageNet 标签文件及读取脚本 项目地址: https://gitcode.com/open-source-toolkit/56c9e 项目介绍 在计算机视觉领域,ImageNet数据集是图像分类任务…...

【免费下载】 探索8051开发新境界:IAR for 8051(8.10版本)资源下载推荐

探索8051开发新境界:IAR for 8051(8.10版本)资源下载推荐 【下载地址】IARfor80518.10版本资源下载 IAR for 8051(8.10版本)资源下载 项目地址: https://gitcode.com/open-source-toolkit/1b6d8 项目介绍 在嵌…...