hrbust 1587(Gragon Island)( 递归 )
2012-12-06 12:24
239 查看
刚开始看这道题时感觉有很多的嵌套,(试了其他的方法不行后来才决定用递归)那就是递归了。本题关键是找到递归的关键点。由于当遇到“()”时"()"里面很可能还有“()”说明“()”这个括号有文章。对就是在“(”这个地方递归。以前递归只接触过数学方面的和深搜一类的,这种类型的递归还没想过,看来学一样东西还是要灵活的用,而灵活的用只能是多做题了。
#include<stdio.h> #include<string.h> void Change(int left, int right, char p[])//递归函数 { for (int i=left; i<=right; i++) { if (p[i]>='a' && p[i]<='z') { putchar(p[i]); continue; } if (p[i]>='0' && p[i]<='9')//遇到数字的时候和遇到“(”时一样 { //都是关键点。 int t = 0; while (p[i]>='0' && p[i]<='9') { t = t * 10 + p[i] - '0'; i++; } int tt = 0; int ll = i;//记录下次递归的开始(也就是“(”的位置)。 if (p[ll]=='(') { int k = 1; int j; ll = i+1; for (j=i+1; j<right; j++)//由于“()”里面 { //还有可能有“()” if (p[j] == '(') //所以要判断匹配也就是 { //找到最后一个“)”的位置。 k++; } else if (p[j] == ')') { k--; } if (k == 0) { break; } } tt = j - 1; for (k=0; k<t; k++)//有t个递归。 { Change(ll, tt, p); } i = j; continue; } else { for (int k=0; k<t;k++) { putchar(p[i]); } } } else if (p[i]=='(' || p[i]==')') { continue; } } return; } int main(void) { int t; char dd[110]; scanf("%d",&t); while (t--) { scanf("%s", dd); int len = strlen(dd); Change(0, len-1, dd); putchar('\n'); } return 0; }
Gragon Island | ||||||
| ||||||
Description | ||||||
传说在很久很久以前,江湖上流传着一个叫Gragon Island的地方,传说那个地方有神龙的存在,但是那个地方所处的位置十分偏僻,而且岛上阴森可怖,因此不曾有人涉足。 当时北方有一个叫 wd 的侠客,南方有一个叫Cc的侠女,他们几乎同时对这座岛产生了兴趣,于是他们商量好结伴而行,但是当他们相遇的时候,Cc突然想考验一下wd的能力,因为担心他会拖自己的后腿,于是她给wd出了个题目: 她说一些语句,wd要立刻还原出来,语句的主要内容是由小写的英文字母组成,但是语句中可能会有一些连续相邻的但是相同的子串,Cc会把其中一些合并,例如:2(nova)表示novanova;2nova 表示 nnova; 有些括号前可能是1,在这些情况之中有些是把1省略的,例如:nova = no(va) = no1(va)。 如果wd可以还原出原字符串,Cc就同意和他一起去Gragon Island,但是这却没有难倒wd,因为他带了个叫扣得不牢克的神器,通过它wd轻松的将语句还原了出来,于是他们踏上了前往目的地的旅程... | ||||||
Input | ||||||
多组测试数据,第一行一个整数T表示语句的数量,接着是T行表述式,表述式是将按照上面介绍的规则书写,不会出现括号不匹配的情况,字符串的长度不会超过100. | ||||||
Output | ||||||
对于每组测试数据,输出还原之后的语句,每条语句占一行。 | ||||||
Sample Input | ||||||
2 1(wind2m1d) 2(1tm2(ac)) | ||||||
Sample Output | ||||||
windmmd tmacactmacac |
相关文章推荐
- hrbust 1587 Gragon Island【模拟+递归Dfs+栈】
- 分形问题 递归打印解决 另附hrbust 2291 题目
- hrbust 2347 递归画图
- 分形问题 递归打印解决 另附hrbust 2291 题目
- hrbust2186找规律递归
- Hrbust 菜鸟和大牛(递归做法)
- hrbust 2347 递归画图 【dfs】
- hrbust 泉水(递归)
- hrbust 1594 Gragon Ball【模拟】
- 采用非递归方式遍历目录及其子目录的文件
- 用栈消除递归调用,实现DFS【伪代码】
- 关于递归实现字符串反转,没想到字符随机写入操作,不new就不行?
- c语言常见50题 及答案(递归 循环 以及常见题目)
- 编写一个函数实现n^k,使用递归实现
- 八皇后问题(递归,回溯)
- java 递归查找所有目录并且删除文件夹中包含temp的文件夹
- SQL实现递归及存储过程中In()参数传递解决方案详解
- n皇后问题的递归与迭代算法
- 约瑟夫环问题递归解法的一点理解
- [51nod 1587]半现串