HDU ACM 1274 展开字符串
来源:互联网 发布:3.3v单片机收发5v信号 编辑:程序博客网 时间:2024/06/05 20:28
使用栈操作,一次展开即可,如果递归调用则会栈溢出。
#include<iostream> using namespace std;int stack[550]; //栈int top; //栈顶void f(char* p){int k,i,j;i=0;if(*(p+i)>='a' && *(p+i)<='z') //字母前面是否有重复次数,因为1可以省略k=1; else k=0;while(*(p+i)!=NULL){if(*(p+i)>='0' && *(p+i)<='9') //计算重复次数{k=k*10+(*(p+i)-'0');i++;}else if(*(p+i)=='('){if(k==0) k=1; //如要压栈就最少重复一次stack[top++]=--k; //压栈操作stack[top++]=i;if(*(p+i+1)>='a' && *(p+i+1)<='z') k=1; else k=0;i++;}else if(*(p+i)!=')'){for(j=0;j<k;j++)putchar(*(p+i));i++;if(*(p+i)==NULL) break;if(*(p+i)>='a' && *(p+i)<='z')k=1;else k=0;}else if(*(p+i)==')') //出栈操作if(stack[top-2]) //还有重复次数则继续当前栈帧{stack[top-2]--;i=stack[top-1]; if(*(p+i+1)>='a' && *(p+i+1)<='z') k=1; else k=0;i++;}else //无重复次数则出栈{top-=2;i++;if(*(p+i)==NULL) break; if(*(p+i)>='a' && *(p+i)<='z') k=1; else k=0;}}}int main() {char a[260];int n;cin>>n;getchar();while(n--){gets(a);top=0;f(a); //问题求解cout<<endl;} return 0; }
0 0
- HDU ACM 1274 展开字符串
- HDU 1274 展开字符串
- HDU 1274(展开字符串)
- HDU 1274 展开字符串
- HDU 1274(展开字符串)
- hdu 1274 展开字符串
- HDU 1274 展开字符串
- hdu 1274 展开字符串
- hdu 1274 展开字符串
- hdu 1274 展开字符串
- hdu 1274展开字符串(搜索)
- hdu 1274 展开字符串(栈)
- 字符串展开(递归)hdu 1274
- HDU 1274 展开字符串(递归)
- 杭电ACM 1274---展开字符串 解题报告
- HDU-1274-展开字符串(dfs分段字符串处理)
- HDU-1274展开字符串/HDU-2072单词数
- hdu——1274——展开字符串
- Linux以KB显示内存大小
- 为什么在java和android中会出现@override语句呢?
- 带分数
- IO-06. 输出短句II
- 视频编码(H264概述)
- HDU ACM 1274 展开字符串
- IO-07. 输出短句III
- anroid开发-性能测试篇
- 连续最大字段和与最大字段积
- CentOS下的磁盘管理
- Spring IOC容器(基础搞起)
- HTTP协议详解
- IOS微博项目之启动图片
- POJ 1088 滑雪