hdu1274 展开字符串

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 #include<string.h>
 4 char s[260];
 5 int dfs(int ith)
 6 {
 7     int k,e;
 8     char c;
 9     for(c=s[ith++];ith<strlen(s)&&c!=')';c=s[ith++])//递归结束的条件是字符串结束或遇到右括号 
10     {
11         for(k=0;isdigit(c);c=s[ith++])
12             k=k*10+c-'0';
13         if(!k) k=1;
14         if(c=='('){
15             while(k--)
16                 e=dfs(ith);
17             ith=e;//重置ith的值,到下层递归结束的位置 
18         }
19         else{
20             while(k--)
21                 putchar(c);
22         }
23     }
24     if(c==')') return ith;//返回本次读到结尾的位置 
25 }
26 int main()
27 {
28     int n;
29     scanf("%d",&n);
30     while(n--)
31     {
32         scanf("%s",s);
33         dfs(0);//进入递归 
34         printf("\n");
35     }
36     return 0;
37 }

//一个很不错的递归题,我主要的过程就如一般的表达式求解,遇到左括号进入下层递归,
//否则一直按每个字母前面的数字决定其输出的次数,括号也是如此,而递归结束的标志
//则是遇到 右括号或者到字符串的结尾,注意每次递归结束需要返回下次遍历的序号

posted on 2012-08-18 10:40  小花熊  阅读(546)  评论(0编辑  收藏  举报

导航