小鱼儿吐泡泡(栈)
鏈接:https://www.nowcoder.com/acm/contest/74/A
來源:牛客網
?
題目描述
小魚兒吐泡泡,嘟嘟嘟冒出來。小魚兒會吐出兩種泡泡:大泡泡"O",小泡泡"o"。 兩個相鄰的小泡泡會融成一個大泡泡,兩個相鄰的大泡泡會爆掉。 (是的你沒看錯,小氣泡和大氣泡不會產生任何變化的,原因我也不知道。) 例如:ooOOoooO經過一段時間以后會變成oO。輸入描述:
數據有多組,處理到文件結束。 每組輸入包含一行僅有'O'與'o'組成的字符串。輸出描述:
每組輸出僅包含一行,輸出一行字符串代表小魚兒吐出的泡泡經過融合以后所剩余的泡泡。很明顯的棧:
#include<stdio.h> #include<string.h> #include<math.h>#include<map> #include<queue> #include<stack> #include<string> #include<iostream> #include<algorithm> using namespace std;#define ll long long #define da 0x3f3f3f3f #define xiao -0x3f3f3f3f #define clean(a,b) memset(a,b,sizeof(a))// 雷打不動的頭文件 char chuan[105]; char can[105]; int main() {while(~scanf("%s",&chuan)) //輸進去所有的泡泡 {stack<char> zhan; //定義一個棧 int i,j,l=strlen(chuan); //取長度 for(i=0;i<l;++i){if(zhan.size()==0) //如果棧為空,就直接放進去 {zhan.push(chuan[i]);continue; //跳過循環 }if(zhan.top()=='O'&&chuan[i]=='O') //爆炸的情況 {zhan.pop(); //就踢出去一個棧頂元素 continue; //跳出循環 }if(zhan.top()=='o'&&chuan[i]=='o') //合二為一的情況 {zhan.pop(); // 先去掉棧頂元素 if(zhan.size()) //如果 此時還有元素 {if(zhan.top()=='O') //&&棧頂可消 zhan.pop(); //再消一個 }else // 沒元素了 zhan.push('O'); //把大泡泡放進去 continue; //跳出循環 }zhan.push(chuan[i]); //如果上述條件都不符合(一個小泡泡+大泡泡) }while(zhan.size()) //將棧內元素放到字符串內 {can[zhan.size()-1]=zhan.top();zhan.pop();}l=strlen(can); //取長度 for(i=0;i<l;++i)printf("%c",can[i]); //輸出格式 printf("\n");clean(chuan,'\0'); //清空; clean(can,'\0');} }?
?
?
?
總結
- 上一篇: cad汉仪长仿宋体_长仿宋体字体下载 c
- 下一篇: client copy sap论坛上看到