紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
2017-04-13 21:43
302 查看
题意:输入一串文本,遇到[]就将里面的内容就放到最前面
然后 有两种做法,第一种,用链表来做(用数组模拟)
第二种用递归来
然后 有两种做法,第一种,用链表来做(用数组模拟)
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <cstdio> #include <queue> using namespace std; const int maxn= 100006; char s[maxn]; int next1[maxn]; int main() { while(scanf("%s",s+1)!=EOF) { memset(next1,0,sizeof(next1));//next数组中放的是右边的下标 int len = strlen (s+1); int cur=0,last=0; for(int i=1;i<=len;i++) { if(s[i]=='[') cur=0;//放到最前面 else if(s[i]==']') cur=last;//回归正常 else { next1[i]=next1[cur];//先i的右边等于 cur的右边 next1[cur]=i;//cur 等于 i (相当于将cur与之前的联系去掉了) if(last==cur) last=i;//紧跟 cur=i; } } for(int i=next1[0];i;i=next1[i]) printf("%c",s[i]); printf("\n"); } return 0; }
第二种用递归来
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; string str; void dfs(int l,int r) { int slen=r; while(slen>=l&&str[slen]!='['&&str[slen]!=']') slen--;//从后往前扫,因为最后的[]在最前面,也就是最先输出 if(str[slen]==']') dfs(l,slen-1); for(int i=slen+1;i<=r;i++) printf("%c",str[i]); if(str[slen]=='[') dfs(l,slen-1); } int main() { while(getline(cin,str)){ // cout<<str<<endl; dfs(0,str.length()-1); printf("\n"); } return 0; }
相关文章推荐
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- 链表-单向链表&&UVa 11988 Broken Keyboard(a.k.a.Beijiu Text)(破损的键盘(悲剧文本))的理解与解析
- uva11988数组模拟单向链表
- UVa 11988 Broken Keyboard (a.k.a. Beiju Text) 数组模拟单向链表
- UVa 11988 悲剧文本 采用链表
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- 【数组模拟链表】UVA - 11988 Broken Keyboard
- UVa-11988(数组模拟链表)
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(数组模拟链表)
- UVa - 11988 Broken Keyboard(数组模拟链表)
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- UVa 11988 (数组模拟链表) Broken Keyboard (a.k.a. Beiju Text)
- UVa 11988 数组模拟链表