zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    4.8日学习
    Apache安装
    HTML5 review
    个人阅读作业LAST
    个人阅读作业Week7
    结对编程:界面模块总结
    个人博客作业Week3
    结对编程博客
    个人博客week2
    软工第一次作业简单总结
  • 原文地址:https://www.cnblogs.com/shihuajie/p/2645165.html
Copyright © 2011-2022 走看看