HDU 1274 递归拼接字符串

题目大意:

根据所给的数字,表示其相连的字符的输出个数,或是下一个括号中的所有字符的输出个数

每一个相互对应的 ‘(‘ 和 ‘)‘ 中的所有字母均作为一组数据处理

在每一次dfs过程中都处理好这样一个对应组中间的字符

再根据前面所带的数字k

循环k次输出自己要的数据

每次输出一个字母,因为无论多复杂的字符串都能够转化成最后只带一个数字和一个字母连接的形式,第38行代码有较详细解释

 1 #include <cstring>
 2 #include <cstdio>
 3
 4 using namespace std;
 5
 6 const int N = 255;
 7 char str[N];
 8 int len;//表示str字符串的长度
 9 /*将一组‘(‘‘)‘看作一次递归,而数字看作递归调用的次数*/
10 int dfs(int index)
11 {
12     int k , i;//k来表示前面标志的数字
13     /*一直到找到它对应的‘)‘表示自己这一次递归打印结束*/
14     for(i = index ; i<len && str[i] != ‘)‘ ; i++){
15         k = 0;
16         /*利用下面这个循环获得打印字母次数的k*/
17         while(str[i] - ‘0‘ >= 0 && str[i] - ‘0‘ <= 9){
18             //不是数字就退出循环
19             k = k * 10 + (str[i] - ‘0‘) ;
20             i++; //这里每成功访问到一个数字,那么为了访问下一个str[i]代表字母,就要不断往前加一
21         }
22         if(k == 0) k = 1; //表示前面没有数字表示,就默认为1
23
24         if(str[i] == ‘(‘)
25         {
26             int e;
27             /*因为后面不断putchar打印字母,这里每调用一次dfs,
28             就会把当前‘(‘出发到对应‘)‘结束的所有字母打印一遍,所以要调用k次打印k遍*/
29             while(k--)
30         /*因为你要继续接下来的操作,不能只传入i,因为str[i]对应的是括号,我们需从下一个点访问起,所以i++*/
31                 e = dfs(i+1);
32
33             /*因为通过dfs会打印好所有( )中的字母,所以这里不用再管了,
34             下标移到执行完的e的位置,继续接下来的循环*/
35             i = e;
36         }
37         else{
38             /*因为最后无论字符串如何复杂都会转化成一个个一个数字连接一个字母的情况
39             如3(a),经过递归调用后也产生的是在if(str[i] == ‘(‘)调用3次
40             打印a , 这个a可以理解为1a,最后这个1a就进入了这个else中在
41             while中打印1次 , 又比如2a3bcd就能够理解为先打印了2a再下次进入
42             打印3b,再下一次1c,最后一次打印1d
43             */
44             while(k--)
45                 putchar(str[i]);
46         }
47     }
48     if(i < len) return i; //返回它的结束的括号位置的序号
49     else return len; //返回最后一个位置,表示所有都完成,不再继续递归
50 }
51
52 int main()
53 {
54     //freopen("a.in" , "r" , stdin);
55     int T;
56     scanf("%d" , &T);
57     while(T--){
58         scanf("%s" , str);
59         len = strlen(str);
60         dfs(0);
61         puts("");
62     }
63     return 0;
64 }
时间: 2024-10-25 06:46:50

HDU 1274 递归拼接字符串的相关文章

HDU 1274 展开字符串 (递归+string类)

题目链接:HDU 1274 展开字符串 中文题. 左括号进入DFS函数,右括号return到上一层. 注意return回去的是这个一层递归中的括号中的字母串. AC代码: #include<stdio.h> #include<iostream> #include<string.h> #include<string> using namespace std; char str[300]; bool vis[300]; int len; string dfs(i

拼接字符串,生成tree格式的JSON数组

之前做的执法文书的工作,现在需要从C#版本移植到网页版,从Thrift接口获取数据,加载到对应的控件中 之前用的easyui的Tree插件,通过<ul><li><span></span></li></ul>标签的方式生成node树,条理清晰,虽然麻烦点,但是用循环写几行代码就能搞定,但是,在Ajax的函数里面,tree的样式加载不上,显示的格式就是元素自带的含义,<ul>和<li>,无法点击,下面的工作也就无法

关于前端js拼接字符串的一点小经验

1.今天在做项目的时候遇到一个问题,就是使用onclick="xxx()"  点击事件的时候,参数如果为全数字就会出现点击无反应的问题.但是当参数为字符串或者动态内容的时候就会出现事件无法响应.比如onclick="add("abc")";这样在add方法中无法获取到参数. 解决办法:是用转移字符,onclick="add(\'abc\')";这样在方法中就可以使用了.         2.还有一个是在做拼接字符串的时候,如果

JavaScript 优雅简单的拼接字符串

前言 最近维护一个老系统,里面有大量js拼接字符串的代码,这里总计一下js拼接字符串 JS 原生字符串拼接 JavaScript里面的字符串可以直接用 + 来拼接 return "<a style='text-decoration:underline' onClick='" + valsAr[1] + " return false;" + "' data-rowId='" + row_id + "' href='javascrip

js拼接字符串传值,子窗口传值

避免下次再去查资料,记录一下 1.拼接字符串传值 "UpdateState?ids=" + subStr+"&remark="+reValue) 目标页面接受:public ActionResult UpdateState(string ids, string remark) 2.弹出窗口传值 弹出子窗口:var reValue = window.showModalDialog('Dialog', obj, 'dialogWidth=120px;dialog

SSRS 2012 参数化报表 -- 利用拼接字符串来取代查询参数

SSRS 2012 参数化报表 -- 利用拼接字符串来取代查询参数 以上介绍过了如何在SQL Server中使用参数化查询,但是,如果遇到一些不支持参数化查询的数据库又该怎么办呢?此时,最终极的招数就是整个查询语句都通过参数化查询以拼接字符串的方式来产生. 举例来说,除了XML文件之外,SSRS也能够接收外部Web Services返回的数据集以产生报表.在以下的实例中,利用立陶宛国家银行所提供的实时汇率换算Web服务,它提供各种货币与立陶宛币(Litas)的汇率换算. 步骤1: 请将数据表拖拉

HDU 2072 单词数 --- 字符串处理

/* HDU 2072 单词数 --- 字符串处理 */ #include <cstdio> //C语言改成stdio.h即可 #include <cstring> //C语言改成string.h即可 const int maxn = 85; int main() { char *head1, *head2; char a[maxn]; char b[maxn][maxn]; int i, k, len, cnt1, cnt2; while (gets(a)){ //遇到字符串&q

参数化操作数据库,不用拼接字符串

说明:之前操作数据库一直都是用拼接字符串,发现很多时候做了很多重复工作,并且还要在每个输入的地方放sql注入,实在是麻烦. 用参数传递,则不用担心sql注入的风险(具体为何,不清楚). SqlParameter[] para = new SqlParameter[] { new SqlParameter("@user_name",SqlDbType.NVarChar,10), new SqlParameter("@user_sex",SqlDbType.NVarCh

knockoutJS学习笔记01:从拼接字符串到编写模板引擎

开篇 关于knockout的文章,园里已经有很多大神写过了,而且都写得很好.其实knockout学习起来还是很容易的,看看官网的demo和园里的文章,练习练习就可以上手了(仅限使用,不包含研究源码).之所以想写这个系列,主要是想记录自己的学习和应用过程,也希望能给初学者一点帮助. 既然是学习过程就一步一步来,从最开始的解决方案,到优化过程,到最后的实现方案.有了思考和对比,才会更加明白这个东西有什么好处,为什么使用它.什么情况要使用它.ok, 官网学习链接为?:knockoutJS 准备例子 过