NIT-OJ-1022-展开字符串-解题报告

来源:互联网 发布:淘宝联盟推广qq群教程 编辑:程序博客网 时间:2024/05/21 14:42
在纺织CAD系统开发过程中,经常会遇到纱线排列的问题。该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线 ,例如:abc表示三根纱线的排列;重复可以用数字和括号表示,例如:2(abc)表示abcabc;1(a)=1a表 示a;2ab表示aab;如果括号前面没有表示重复的数字出现,则就可认为是1被省略了,如:cd(abc)=cd1 (abc)=cdabc;这种表示方法非常简单紧凑,也易于理解;但是计算机却不能理解。为了使计算机接受, 就必须将简单紧凑的表达方式展开。某ACM队接受了此项任务。现在你就是该ACM队的一员,请你把这个 程序编写完成。 已知条件:输入的简单紧凑表达方式的长度不超过250个字符;括号前表示重复的数不超过 1000;不会出现除了数字、括号、小写字母以外的任何其他字符;不会出现括号不配对等错误的情况( 错误处理已由ACM其他队员完成了)。 输入和输出要求:本题有多个测试数据组,第一行输入的就是数据组数N,接着就是N行表达式 ,表达式是按照前面介绍的意义书写的。输出时含有N行,每行对应一个输入的表达式。
Sample Input21(1a2b1(ab)1c)3(ab2(4ab))
Sample Outputabbabcabaaaabaaaababaaaabaaaababaaaabaaaab
读题可知:
单个字符串可能包含的情况:
1. 1a
2. 1(a)
3. a
4. (a)
因此相对于每一层: 开头可能 数字开始,字母开始,‘(’开始;中间 "(...)",也可能是 开头的重复; 最后仍可能重复开始的情况。 所以递归程序比较容易实现...
此递归程序设计:
1.*P 传递 判断第一个字符是什么 是数字转 2 ,是字母转3 ,是‘('转4,是‘/0' 返回 '/0';是')',返回 P+1;
2.循环取数字,直到判断为非数字,数字值存 Temp ,是字母转3,是'('转4
3.循环打印该字符,直到Temp 为 0,p++ 后返回 传递P执行1 ;
4.循环Temp次执行传递P执行1 结束循环,记录返回的地址 *p, 返回 传递(记录的地址)执行1;
递归基本设计步骤:
每一个递归程序都遵循相同的基本步骤:
  • 初始化算法。递归程序通常需要一个开始时使用的种子值(seed value)。要完成此任务,可以向函数传递参数,或者提供一个入口函数,这个函数是非递归的,但可以为递归计算设置种子值。
  • 检查要处理的当前值是否已经与基线条件相匹配。如果匹配,则进行处理并返回值。
  • 使用更小的或更简单的子问题(或多个子问题)来重新定义答案。
  • 对子问题运行算法。
  • 将结果合并入答案的表达式。
  • 返回结果。 递归程序容易出现问题..所以最好想清楚或者把过程写下来再编码,才能避免出错...
  • 原创粉丝点击