吐泡泡(栈)
发布日期:2021-05-07 16:48:41 浏览次数:11 分类:原创文章

本文共 1291 字,大约阅读时间需要 4 分钟。

问题链接https://ac.nowcoder.com/acm/problem/15029

#include<bits/stdc++.h>using namespace std;int main(){       char p[120];    while(cin>>p){           int l=strlen(p);        stack<char> a;        for(int i=0;i<l;i++){               if(a.empty()){                   a.push(p[i]);            }else{                   if(a.top()=='O'&&p[i]=='O'){                       a.pop();                }                else if(a.top()=='o'&&p[i]=='o'){                       a.pop();                    if(!a.empty()&&a.top()=='O'){                           a.pop();                    }else{                           a.push('O');                    }                }                else{                       a.push(p[i]);                }            }        }        char k[120];        int t=0;        while(!a.empty()){               k[t++]=a.top();            a.pop();        }        for(int i=t-1;i>=0;i--){               cout<<k[i];        }        cout<<endl;    }    return 0;}

想整理的几点:
1.对于一个字符串的输入输出
char型可以直接用cin cout,也可以用gets();string用getline(cin,a);
2.对于stl中栈的简单应用 stack a;

  1. a.push() 入栈,将元素加到栈顶
  2. a.top() 返回栈顶元素
  3. a.pop() 删除栈顶元素,不返回
  4. a.empty() 判断栈中是否为空,为空返回true
  5. a.size() 返回栈中元素的个数

对于题目,就是将oO气泡输入进数组,然后通过入栈出栈的操作,如果是两个小气泡,就合成大气泡,再在栈顶调出一个元素继续判断是不是大气泡,如果是就破掉。同理判断到两个大气泡直接破掉。最后再用数组完成一次倒序,把栈底变成序列首。

上一篇:小c的笔记本(栈)
下一篇:数学考试dp

发表评论

最新留言

很好
[***.229.124.182]2025年03月30日 17时52分08秒