点击进入该题目
1#include <stdio.h>
2void work(char str[1001],int k,int rec)
3{
4 int i;
5 int j;
6 int kuo;
7 while(rec--)
8 {
9 for(i = k;str[i] != ')' && str[i] != '\0';)
10 {
11 if(str[i] - 'a' >= 0 && str[i] - 'z' <= 25) /**//*字母*/
12 {printf("%c",str[i]);i++;}
13 else if(str[i] == '(') /**//*括号---递归调用*/
14 {
15 work(str,i + 1,1);
16 for(kuo = 1,i += 1;kuo != 0;i++)
17 {
18 if(str[i] == '(')kuo++;
19 if(str[i] == ')')kuo--;
20 }
21 }
22 else { /**//*数字*/
23 if(str[i + 1] - 'a' >= 0 && str[i + 1] - 'a' <= 25) /**//*数字+字母*/
24 {
25 for(j = 0;j < str[i] - '0';j++)
26 printf("%c",str[i + 1]);
27 i += 2;
28 }
29 else if(str[i + 1] == '(') /**//*数字+括号---递归调用*/
30 {
31 work(str,i + 2,str[i] - '0');
32 for(kuo = 1,i += 2;kuo != 0;i++)
33 {
34 if(str[i] == '(')kuo++;
35 if(str[i] == ')')kuo--;
36 }
37 }
38 }
39 }
40 }
41}
42int main()
43{
44 int T;
45 char str[1001];
46 scanf("%d",&T);
47 getchar();
48 while(T--)
49 {
50 gets(str);
51 work(str,0,1);
52 printf("\n");
53 }
54}
通过递归巧妙的递归调用简化了解题步骤
posted on 2009-05-19 17:27
Wood_K 阅读(513)
评论(0) 编辑 收藏 引用