您的位置:首页 > 编程语言 > Go语言

hrbust 1587(Gragon Island)( 递归 )

2012-12-06 12:24 239 查看
刚开始看这道题时感觉有很多的嵌套,(试了其他的方法不行后来才决定用递归)那就是递归了。本题关键是找到递归的关键点。由于当遇到“()”时"()"里面很可能还有“()”说明“()”这个括号有文章。对就是在“(”这个地方递归。以前递归只接触过数学方面的和深搜一类的,这种类型的递归还没想过,看来学一样东西还是要灵活的用,而灵活的用只能是多做题了。

#include<stdio.h>
#include<string.h>

void Change(int left, int right, char p[])//递归函数
{
for (int i=left; i<=right; i++)
{
if (p[i]>='a' && p[i]<='z')
{
putchar(p[i]);
continue;
}
if (p[i]>='0' && p[i]<='9')//遇到数字的时候和遇到“(”时一样
{                                    //都是关键点。
int t = 0;
while (p[i]>='0' && p[i]<='9')
{
t = t * 10 + p[i] - '0';
i++;
}
int tt = 0;
int ll = i;//记录下次递归的开始(也就是“(”的位置)。
if (p[ll]=='(')
{
int k = 1;
int j;
ll = i+1;
for (j=i+1; j<right; j++)//由于“()”里面
{                                  //还有可能有“()”
if (p[j] == '(')          //所以要判断匹配也就是
{                        //找到最后一个“)”的位置。
k++;
}
else if (p[j] == ')')
{
k--;
}
if (k == 0)
{
break;
}
}
tt = j - 1;
for (k=0; k<t; k++)//有t个递归。
{
Change(ll, tt, p);
}
i = j;
continue;
}
else
{
for (int k=0; k<t;k++)
{
putchar(p[i]);
}
}
}
else if (p[i]=='(' || p[i]==')')
{
continue;
}
}
return;
}
int main(void)
{
int t;
char dd[110];

scanf("%d",&t);

while (t--)
{
scanf("%s", dd);

int len = strlen(dd);

Change(0, len-1, dd);
putchar('\n');
}
return 0;
}


Gragon Island
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 4(3 users)Total Accepted: 3(3 users)Rating:

Special Judge: No
Description
传说在很久很久以前,江湖上流传着一个叫Gragon Island的地方,传说那个地方有神龙的存在,但是那个地方所处的位置十分偏僻,而且岛上阴森可怖,因此不曾有人涉足。

当时北方有一个叫 wd 的侠客,南方有一个叫Cc的侠女,他们几乎同时对这座岛产生了兴趣,于是他们商量好结伴而行,但是当他们相遇的时候,Cc突然想考验一下wd的能力,因为担心他会拖自己的后腿,于是她给wd出了个题目:

她说一些语句,wd要立刻还原出来,语句的主要内容是由小写的英文字母组成,但是语句中可能会有一些连续相邻的但是相同的子串,Cc会把其中一些合并,例如:2(nova)表示novanova;2nova 表示 nnova; 有些括号前可能是1,在这些情况之中有些是把1省略的,例如:nova = no(va) = no1(va)。

如果wd可以还原出原字符串,Cc就同意和他一起去Gragon Island,但是这却没有难倒wd,因为他带了个叫扣得不牢克的神器,通过它wd轻松的将语句还原了出来,于是他们踏上了前往目的地的旅程...


Input
多组测试数据,第一行一个整数T表示语句的数量,接着是T行表述式,表述式是将按照上面介绍的规则书写,不会出现括号不匹配的情况,字符串的长度不会超过100.

Output
对于每组测试数据,输出还原之后的语句,每条语句占一行。

Sample Input
2

1(wind2m1d)

2(1tm2(ac))

Sample Output
windmmd

tmacactmacac

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: