小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)例如:ooOOoooO经过一段时间以后会变成oO。 #include <iostream> #include <cstring> #include <stack> using namespace std; char c[200]; stack<char> s; int main(){ while(cin>>c){ for(int i=0;c[i]!='\0';i++){ s.push(c[i]); while(s.size()>1){ char cc=s.top(); s.pop(); if(cc==s.top()){ if(cc=='O') s.pop(); else s.pop(),s.push('O'); } else{ s.push(cc); break; } } } memset(c,0,sizeof(c)); if(s.size()){ int x,y=s.size(); for(x=0;x<y;x++){ c[x]=s.top(); s.pop(); } //cout<<c<<endl; for(int i=x-1;i>=0;i--) cout<<c[i]; } cout<<endl; } return 0; } 暴力解法: #include<bits/stdc++.h> using namespace std; int main() { int i,j,n; char op[102]; while(~scanf("%s",op)) { n=strlen(op); i=0; while(op[i]) { if(op[i]=='o'&&op[i+1]=='o') { op[i]='O'; for(j=i+1;j<=n-1;j++) op[j]=op[j+1]; i=0;continue;///此为重点 } if(op[i]=='O'&&op[i+1]=='O') { for(j=i;j<n-1;j++) op[j]=op[j+2]; i=0;continue;///此为重点 } i++; } printf("%s\n",op); } return 0; }