本文共 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;
对于题目,就是将oO气泡输入进数组,然后通过入栈出栈的操作,如果是两个小气泡,就合成大气泡,再在栈顶调出一个元素继续判断是不是大气泡,如果是就破掉。同理判断到两个大气泡直接破掉。最后再用数组完成一次倒序,把栈底变成序列首。
转载地址:http://nqdr.baihongyu.com/