博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ-2571 Big String Outspread 模拟
阅读量:6080 次
发布时间:2019-06-20

本文共 1402 字,大约阅读时间需要 4 分钟。

题意:给定一个字符串,按照要求输出来。

解法:每次进行一次首字母判定,然后根据不同的情况进行递归。

代码如下:

#include 
#include
#include
#include
#include
#include
using namespace std;char str[300];string display(int ti, int sta, int fuck) { string ret; if (sta > fuck) return ret; if (sta == fuck && !isalpha(str[sta])) return ret; string tmp; if (!isalpha(str[sta])) { // 如果不是以字符开始 if (isdigit(str[sta])) { int t = 0, i, j; for (i = sta; isdigit(str[i]); ++i) { // 如果是数字的话 t = t * 10 + (str[i] - '0'); // 得出循环的次数数字 } if (str[i] != '(') { // 如果后面不是括号,那么只有一位 tmp = display(t, i, i) + display(1, i+1, fuck); } else { int cnt = 0; for (j = sta; ; ++j) { // 找到括号在的位置 if (str[j] == ')') { --cnt; if (!cnt) break; } else if (str[j] == '(') ++cnt; } tmp = display(t, i+1, j-1) + display(1, j+1, fuck); } } else { // 如果是括号进入 int cnt = 0, j; for (j = sta; ; ++j) { if (str[j] == ')') { --cnt; if (!cnt) break; } else if (str[j] == '(') ++cnt; } tmp = display(1, sta, j-1) + display(1, j+1, fuck); } while (ti--) { ret += tmp; } } else { tmp = str[sta] + display(1, sta+1, fuck); while (ti--) ret += tmp; // 把后面的这一个字母进行重复 } return ret;}int main() { int T, len; scanf("%d", &T); while (T--) { scanf("%s", str); len = strlen(str); cout << display(1, 0, len-1) << endl; } return 0;}

 

转载于:https://www.cnblogs.com/Lyush/archive/2013/04/15/3023202.html

你可能感兴趣的文章
Spring Cloud Config 加密和解密
查看>>
Linux 快速生成虚拟机 shell脚本
查看>>
mysql主从
查看>>
栈、队列、链表
查看>>
监听按钮的点击事件
查看>>
数据库中多行数据合并成一个字符串
查看>>
开启多SQL语句执行
查看>>
并发 信号量 Semaphore
查看>>
【Python 第7课】if
查看>>
小米7.0系统设备一键激活Xposed框架的教程
查看>>
MySql 开发实用笔记 2015-08-27
查看>>
GO 中常见的 flag 和 函数
查看>>
APM for .NET评测系列:OneAPM vs SCOM
查看>>
小代码
查看>>
ios页面返回上层页面数据没有更新,可以在上层页面强制加入监听进行更新
查看>>
puppeteer尝试-爬链家
查看>>
如何写出无法维护的代码?
查看>>
MySQL字符集详解
查看>>
netty报错:io.netty.channel.ChannelPipelineException
查看>>
ThinkPHP RBAC如何自动获取所有模块的函数
查看>>