吐泡泡(模拟)
吐泡泡
https://ac.nowcoder.com/acm/problem/15029
题目描述
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"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; }
牛客算法竞赛入门课第二节习题题解 文章被收录于专栏
入门课第二节习题题解