吐泡泡(模拟)

吐泡泡

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;
}

入门课第二节习题题解

全部评论

相关推荐

11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
10-25 23:12
门头沟学院 Java
点赞 评论 收藏
分享
牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务