递归_字符串压缩与解压{浙大ACM2571——Big String Outspread}

递归_字符串压缩与解压{浙大ACM2571——Big String Outspread}

 点击进入该题目

 1 #include  < stdio.h >
 2 void  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}

42 int  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}

  通过递归巧妙的递归调用简化了解题步骤

你可能感兴趣的:(递归_字符串压缩与解压{浙大ACM2571——Big String Outspread})