刚开始看这道题时感觉有很多的嵌套,(试了其他的方法不行后来才决定用递归)那就是递归了。本题关键是找到递归的关键点。由于当遇到“()”时"()"里面很可能还有“()”说明“()”这个括号有文章。对就是在“(”这个地方递归。以前递归只接触过数学方面的和深搜一类的,这种类型的递归还没想过,看来学一样东西还是要灵活的用,而灵活的用只能是多做题了。
1 #include<stdio.h> 2 #include<string.h> 3 4 void Change(int left, int right, char p[])//递归函数 5 { 6 for (int i=left; i<=right; i++) 7 { 8 if (p[i]>='a' && p[i]<='z') 9 { 10 putchar(p[i]); 11 continue; 12 } 13 if (p[i]>='0' && p[i]<='9')//遇到数字的时候和遇到“(”时一样 14 { //都是关键点。 15 int t = 0; 16 while (p[i]>='0' && p[i]<='9') 17 { 18 t = t * 10 + p[i] - '0'; 19 i++; 20 } 21 int tt = 0; 22 int ll = i;//记录下次递归的开始(也就是“(”的位置)。 23 if (p[ll]=='(') 24 { 25 int k = 1; 26 int j; 27 ll = i+1; 28 for (j=i+1; j<right; j++)//由于“()”里面 29 { //还有可能有“()” 30 if (p[j] == '(') //所以要判断匹配也就是 31 { //找到最后一个“)”的位置。 32 k++; 33 } 34 else if (p[j] == ')') 35 { 36 k--; 37 } 38 if (k == 0) 39 { 40 break; 41 } 42 } 43 tt = j - 1; 44 for (k=0; k<t; k++)//有t个递归。 45 { 46 Change(ll, tt, p); 47 } 48 i = j; 49 continue; 50 } 51 else 52 { 53 for (int k=0; k<t;k++) 54 { 55 putchar(p[i]); 56 } 57 } 58 } 59 else if (p[i]=='(' || p[i]==')') 60 { 61 continue; 62 } 63 } 64 return; 65 } 66 int main(void) 67 { 68 int t; 69 char dd[110]; 70 71 scanf("%d",&t); 72 73 while (t--) 74 { 75 scanf("%s", dd); 76 77 int len = strlen(dd); 78 79 Change(0, len-1, dd); 80 putchar('\n'); 81 } 82 return 0; 83 }
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 |