uva120 Stacks of Flapjacks

2024-05-05 00:08
文章标签 stacks flapjacks uva120

本文主要是介绍uva120 Stacks of Flapjacks,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简短精悍的c++程序:1.使用for循环替代冗长的while循环  2.使用deque、iterator 以及  max_element()  ,  reverse() ,  distance() 函数。3. 注释清晰,语言简练

#include <algorithm>
#include <iostream>
#include <iterator>
#include <deque>
#include <string>
#include <sstream>
using namespace std;
//主函数
int main(void) {
//循环处理输入的每组字符串。每次循环一轮要输出最后的0和换行
for (string strLine; getline(cin, strLine); cout << '0' << endl) {
//按要求回应输入的字符串行
cout << strLine << endl;
//构造字符串流,以遍转换为数字
istringstream iss(strLine);
//将字符串转为数字,逆序(最底的在最前)存储在Stack里
deque<int> Stack;
for (int nDiam; iss >> nDiam; Stack.push_front(nDiam));
//从底依次上向进行翻转,保持i上面的都比i小
for (deque<int>::iterator i = Stack.begin(); i != Stack.end(); ++i) {
//找出i上面(包括i)的最大元素
deque<int>::iterator iMax = max_element(i, Stack.end());
//如果最大元素就是i则继续(将i指向上面一个)
if (iMax != i) { //否则要进行需翻转操作
//如果最大的不在最上面,则需先翻转到最上面
if (iMax != Stack.end() - 1) {
reverse(iMax, Stack.end());
//输出翻转的起点
cout << distance(Stack.begin(), iMax) + 1 << ' ';
}
//将最大的从最上面翻转到i的位置上
reverse(i, Stack.end());
//输出翻转的起点
cout << distance(Stack.begin(), i) + 1 << ' ';
}
}
}
return 0;
}


 

这篇关于uva120 Stacks of Flapjacks的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/960399

相关文章

120 - Stacks of Flapjacks

题目:120 - Stacks of Flapjacks 题目大意:将栈里的数依靠队列实现从栈顶到栈底的数从小到大 解题思路:从栈底往上判断看依次是否为相对最大的数,是就不需要靠队列来翻转,不是的话就看这个相对大的数是否在栈顶,是的话就用队列反转,并记下翻转的位置,如果不在栈顶,就把这个数反转到栈顶,在进行上述的那个操作,知道所有的数都从小到大的排列在栈里面。 注意:栈和队

Implement Queue using Stacks问题及解法

问题描述: Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop() -- Removes the element from in front of queue.peek() -- Get the front element

STL——Stacks容器

一、stack 1.操作 语法: ==<=>=<>!= 所有的这些操作可以被用于堆栈. 相等指堆栈有相同的元素并有着相同的顺序。 2.empty 语法: bool empty(); 如当前堆栈为空,empty() 函数 返回 true 否则返回false. 3.pop 语法: void pop(); pop() 函数移除堆栈中最顶层

UVa - 120 - Stacks of Flapjacksh

STL 果然强大, 看了魔神代码,琢摩了很久。 reserve 后面跟sort 一样要加一, 还有deque<int> p.   p.end()不指向任何元素。 可进行p.end() - 1等操作。 distance (地址, 地址)。 这里对地址的顺序有要求, 需小的在前。不然会成负数。 题目大意: 翻饼,  将顺序调为从小到大。输出翻的位置。 #include<iostream>

LeetCode--Implement Queue using Stacks

Problem: Implement the following operations of a queue using stacks. - push(x) – Push element x to the back of queue. - pop() – Removes the element from in front of queue. - peek() – Get the fron

227.Mock Hanoi Tower by Stacks-用栈模拟汉诺塔问题(容易题)

用栈模拟汉诺塔问题 题目 在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件: (1) 每次只能移动一个盘子。 (2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。 (3) 每个盘子只能放在比它大的盘子上面。 请写一段程序,实现将第一个堆

[LeetCode]232.Implement Queue using Stacks

题目 Implement the following operations of a queue using stacks. push(x) – Push element x to the back of queue. pop() – Removes the element from in front of queue. peek() – Get the front element. e

HDU 5818 Joint Stacks (优先队列、链表)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5818 题意:两个栈,可以对其进行push,pop操作,除此之外还有一个操作 merge A, B,是B中的元素合并到A里,然后B清空,注意此时A内元素的顺序还是按照原来初始插入的顺序。让输出每个pop操作的数。 比赛时是用左偏树过的,代码当然是丑陋不堪。后来发现用优先队列进行一个小优化

Leetcode NO.232 Implement Queue Using Stacks 使用栈实现队列

文章目录 1.问题描述2.测试用例示例 1 3.提示4.代码1.入队反转code复杂度 2.出队反转code复杂度 1.问题描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头

C++ 模拟栈 stacks (数据结构实验)

非常不喜欢链表操作,  又因为 c++  STL 库里 自带 stack 函数,  但是  实验课 需要自己写,  好吧 模仿STL stack  写到一个结构体中,  这让我习惯了stack 函数的人很舒服。 (1)输入一个十进制数,利用栈操作,将该数转换成n进制数。 (2)输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。 so