当前位置:
首页 >
用法 stl_51Nod 2160 数字游戏 STL基本用法
发布时间:2023/11/27
52
豆豆
生活随笔
收集整理的这篇文章主要介绍了
用法 stl_51Nod 2160 数字游戏 STL基本用法
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
目录
- 目录
- 1. 题目描述
- 1.1. Limit
- 1.2. Problem Description
- 1.3. Input
- 1.4. Output
- 1.5. Sample Input
- 1.6. Sample Output
- 1.7. Source
- 2. 解读
- 3. 代码
1. 题目描述
1.1. Limit
Time Limit: 1000 ms
Memory Limit: 131072 kB
1.2. Problem Description
现在有
个数字依次进入一个栈,每个数字进入栈的时候,如果栈顶元素小于,则会将栈顶元素弹出,新的栈顶元素如果仍然小于,则会将新的栈顶元素继续弹出,直到栈顶元素大于等于为止,才会加入栈。问个数字依次进入后,最后栈里的数字依次是?1.3. Input
输入第一行一个整数
,表示有个数字依次进入栈。 接下来行,每行一个整数,表示第个数字。1.4. Output
若干行,表示最后栈中的数字。
1.5. Sample Input
5
5
3
2
4
1
1.6. Sample Output
5
4
1
1.7. Source
51Nod 2160 数字游戏
2. 解读
使用STL中的 Vector 按照题目中的要求模拟栈的入栈出栈即可。
注:在判断栈顶元素是否小于即将入栈的元素的for循环中,不能使用 i < stack.size() 来判断是否跳出循环,因为出栈时 stack.size() 会减1,这样使用会导致循环最多只能遍历一半栈中的元素。
3. 代码
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;int main()
{long long n;// 读入nscanf("%lld", &n);// 初始化栈vector<int> stack;// 栈的深度long long stackDepth = 0l;// bufferlong long buffer;// 若大于0if (n > 0) {// 读取第一个元素scanf("%lld", &buffer);// 入栈stack.push_back(buffer);// 深度加1stackDepth++;// 读入入栈元素for (long long i = 1; i < n; i++) {// 读取输入scanf("%lld", &buffer);size_t sizeBuffer = stackDepth;for (size_t j = 0; j < sizeBuffer; j++) {// 若栈顶元素小于即将新入栈的元素bufferif (stack[stackDepth - 1] < buffer && stackDepth > 0) {// 栈顶元素出栈stack.pop_back();// 深度减1stackDepth--;} else {break;}}// 元素入栈stack.push_back(buffer);// 深度加1stackDepth++;}// 输出栈内元素for (size_t i = 0; i < stack.size(); i++) {printf("%dn", stack[i]);}}
}
联系邮箱:curren_wong@163.com
Github:https://github.com/CurrenWong
欢迎转载/Star/Fork,有问题欢迎通过邮箱交流。
总结
以上是生活随笔为你收集整理的用法 stl_51Nod 2160 数字游戏 STL基本用法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 做羊水穿刺多少钱啊?
- 下一篇: insight切换窗口 source_S