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 }

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

你可能感兴趣的:(字符串)