卡码网语言基础课 | 19. 洗盘子

该博客围绕C++中栈的知识展开。介绍了栈的基本概念,如空栈、栈顶、栈底,特点是先入后出;讲解了栈的操作,包括引入头文件、创建栈等;还给出一个模拟洗盘子的实例,通过栈来解决问题,体现了栈在计算机领域的应用。

 

目录

 一、 栈的基本概念

二、 栈的操作

2.1 引入头文件

2.2 创建栈

2.3 栈的基本认识

 三、 解答


通过本次练习,将学习到以下 C++知识点:

  • 栈的基本概念(空栈、栈顶、栈底)和特点(先入后出)
  • 入栈、出栈、获取栈顶元素和判断栈是否为空栈等基本操作
  • stack的定义和使用

题目描述:

假设你手里有一个盘子堆放区。现在需要模拟洗盘子的过程,每个盘子都有一个编号。 

盘子堆放区操作说明: 

1. 当操作为 1 时,表示从盘子堆放区拿走顶部的盘子清洗。
2. 当操作为 2 时,表示有未洗的盘子放入盘子堆放区。 

在一系列操作之后,你需要回答:下一个清洗的盘子编号?

输入描述:

第一行有一个整数 n,代表初始盘子堆放区中盘子的数量为 n。 

第二行有 n 个整数,代表了盘子的编号,同时整数之间的顺序也代表了未洗盘子加入盘子堆放区的顺序。 

第三行为一个整数 m,代表接下来将会有 m 次操作。 

接下来一共有 m 行,代表共有 m 次操作。 

如果是操作 1,那么该行只会有一个数字 1,代表有一个盘子被拿走清洗。 

如果是操作 2,那么该行有两个数字,第一个数字 2 表示有未洗的盘子加入,第二个数字代表未洗的盘子编号。

输出描述:

输出共一行,为下一个该清洗的盘子编号。 如果没有下一个该清洗的盘子,那么请输

“小猪仔盘子问题”并不是一个通用的、广为人知的经典问题,由于缺乏该问题的具体描述,下面假设一个简单的“小猪仔盘子问题”场景及对应的 C++ 解决方法。 ### 问题场景假设 假设有 `n` 个盘子需要小猪仔来,每个盘子有不同的脏污程度 `dirtyLevel`,小猪仔每次盘子会消耗与盘子脏污程度相同的体力。小猪仔初始体力为 `energy`,问小猪仔最多能多少个盘子。 ### C++实现 ```cpp #include <iostream> #include <vector> #include <algorithm> // 解决小猪仔盘子问题的函数 int solvePigletWashDishes(int energy, std::vector<int> dirtyLevels) { // 对盘子的脏污程度进行排序 std::sort(dirtyLevels.begin(), dirtyLevels.end()); int count = 0; for (int level : dirtyLevels) { if (energy >= level) { energy -= level; count++; } else { break; } } return count; } int main() { int energy = 100; // 小猪仔初始体力 std::vector<int> dirtyLevels = {20, 30, 10, 40, 50}; // 每个盘子的脏污程度 int result = solvePigletWashDishes(energy, dirtyLevels); std::cout << "小猪仔最多能 " << result << " 个盘子。" << std::endl; return 0; } ``` ### 代解释 1. **排序**:对盘子的脏污程度数组 `dirtyLevels` 进行排序,优先脏污程度小的盘子,这样能保证在有限体力下更多的盘子。 2. **遍历**:遍历排序后的数组,只要小猪仔的体力足够当前盘子,就消耗相应体力并增加盘子数量。 3. **结果返回**:返回最多能盘子数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值