用递归,题目见:logo语言 - 洛谷
#include <stdio.h>
char s[100000];
int dfs(char *p)//前进和后退很简单
{
//char *p=s;
int n=0;
while(*p!='\0')
{
if(*p=='F')
{
while(*p>'9'||*p<'0')
p++;
int m=0;
while(*p>='0'&&*p<='9')
{
int key=*p-'0';
m=m*10+key;
p++;
}
n+=m;
}
else if(*p=='B')
{
while(*p>'9'||*p<'0')
p++;
int m=0;
while(*p>='0'&&*p<='9')
{
int key=*p-'0';
m=m*10+key;
p++;
}
n-=m;
}
else if(*p=='R')//重复,即将子段临时构建成以\0为结尾的合法字符串
{
while(*p>'9'||*p<'0')
p++;
int m=0;
while(*p>='0'&&*p<='9')
{
int key=*p-'0';
m=m*10+key;
p++;
}
int i=0;
char *q=p;
while(*p!='\0')
{
if(*p=='[')
i++;
else if(*p==']')
i--;
if(i==0)
{
*p='\0';//找到该重复的末尾,将其修改成\0
break;
}
p++;
}
n=n+m*dfs(q);//进入子段计算
*p=']';//恢复
}
else
p++;
}
return n>0? n: -n;
}
int main()
{
int i=0;
char c;
while(1)//洛谷getchar读入,末尾为EOF
{
c=getchar();
if(c==EOF)
break;
s[i++]=c;
}
s[i]='\0';
int n=dfs(s);递归开始
printf("%d",n);
return 0;
}版权声明:本文为weixin_62677028原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。