题目描述
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。
两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。
(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)
例如:ooOOoooO经过一段时间以后会变成oO。
输入描述:
数据有多组,处理到文件结束。
每组输入包含一行仅有’O’与’o’组成的字符串。
输出描述:
每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。
示例
输入:
ooOOoooO
输出:
oO
思路
感觉用栈比较合适,逐个读入,若当前栈顶为小泡泡,下一个为小泡泡则栈顶改为大泡泡;若进入的是大泡泡则不懂;若栈顶为大泡泡略;最后输出栈就行
代码
以下是一组输入的代码,多组输入的话还要改
#include<bits/stdc++.h>
using namespace std;
int main()
{
stack<char> s;
char c;
while(cin>>c)
{
if(s.empty()){s.push(c);continue;}
if(s.top()=='o')
{
if(c=='o')
{
s.pop();
if(s.empty())
{
s.push('O');
}
else if(s.top()!='O')s.push('O');
else{s.pop();}
}
else
{
s.push(c);
}
continue;
}
else if(s.top()=='O')
{
if(c=='O')
{
s.pop();
}
else
{
s.push(c);
}
}
}
int n=s.size();
char* q=(char*)malloc(sizeof(char)*n);
char t;
for(int i=0;i<n;i++)
{
t=s.top();
s.pop();
q[i]=t;
}
for(int i=n-1;i>=0;i--)
{
cout<<q[i];
}
return 0;
}