题目描述 
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。 两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。 (是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。) 例如:ooOOoooO经过一段时间以后会变成oO。
输入描述:
数据有多组,处理到文件结束。 每组输入包含一行仅有'O'与'o'组成的字符串。
输出描述:
每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。
示例1
输入
ooOOoooO
输出
oO
说明
自左到右进行合并
备注:
对于100%的数据, 字符串的长度不超过100。
思路
类似于小时候玩的祖玛游戏,用一个栈去模拟,先入栈,依次取出栈顶再与新的栈顶比较判断,注意连续“爆破”,这里用了goto,注意不符合要求的话要把栈顶塞回去!!!
代码
//吐泡泡(模拟)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
string str;
while(cin>>str)
{
char s[110];
int k = 0;
for(int i = 0 ; i < str.length() ; i++)
{
s[k++] = str[i];
loop:if(k < 2)
continue;
char ch = s[--k];
if(s[k - 1] == 'o' && ch == 'o')
{
s[k - 1] = 'O';
goto loop;
}
else if(s[k - 1] == 'O' && ch == 'O')
k--;
else
s[k++] = ch;
}
for(int i = 0 ; i < k ; i++)
cout<<s[i];
cout<<endl;
}
return 0;
} 
京公网安备 11010502036488号