HDU
来源:互联网 发布:帮助记忆的音乐知乎 编辑:程序博客网 时间:2024/06/06 02:52
传送门
思路:数据量并不大, 我们只需模拟即可,分两种策略
step1 : 如果是数字, 代表需要循环输出, 此时又分两种策略
1:如果后面是“(”, 则需要循环一个字符串, 即递归即可
2:如果后面是单个字母, 只需把后面的一个字母循环输出多次即可。
step2:如果是字母, 直接输出
也就是说我们写的函数就是要输出后面字符串需要的次数,如果碰到了数字, 我们循环几次这个函数即可, 这就需要我们知道从哪个地方开始输出, 而且这个函数结束之后我们要知道已经进行到哪里了。因为后面的循环了之后,不需要再找了, 已经循环输出了。
AC代码:
#include <iostream>#include <cstdio>using namespace std;string ss;int fun(int x){ char ch; int k; for(ch = ss[x++]; ch != ')' && x < ss.size(); ch = ss[x++]) //如果碰到“)”, 直接返回即可, 此时没有等待返回值的情况,不需要返回值 { for(k = 0; ch <= '9' && ch >= '0'; ch = ss[x++]) k = k*10 + ch - '0'; //把数字找出来, 可能不止一位 if(!k) k = 1; // 如果前面没有数字,证明只需要输出一次, 覆盖成1 if(ch == '(') { int tmp; while(k--) tmp = fun(x); x = tmp; //更新x的值, 因为之前的已经解决了(循环输出了), 直接在后面继续即可 } else while(k--) putchar(ch); } if(ch == ')') return x; //如果是“)”, 说明上一层函数的tmp在等待返回值, 我们需要返回当前输出到哪里了}int main(){ int N; cin >> N; while(N--) { cin >> ss; fun(0); puts(""); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- java 将对象写入到文件中
- 习题5.7
- 线程条件队列ConditionObject源码解读
- HTTP协议
- 解读Batch Normalization
- HDU
- 【一起来学C语言】数组(二)
- 通过例子学习spark rdd--Action函数
- startup.bat启动tomcat时异常Error starting static Resources
- Chronometer实现计时器的开始停止重置功能
- Spring各种注解标签作用详解
- Win7下搭建Apache+PHP+MySQL环境
- set
- QT 使用QWebEngineView 加载浏览器页面