题解 P1322 【logo语言】
经过2天的调试,我终于AC了。
WA->RE->MLE->AC!
坑点:
- FW、BK、REPEAT和[]之间可能有空格,可能没有
- 递归效率太低可能会栈溢出
看了一下好像只有我一个人是导入全部字符串再一起处理的
#include <cstdio>
int strlen(char * str){//计算字符数组长度;
int i=0;
for(;str[i]!='\0';i++);
return i;
}
int decode(char * code){//编译函数;
char c;//临时字符变量
int dis=0;//运行的距离
char x[255]="";//存储REPEAT中的语句
int num=0;//存储数字(例如FW后面)
for(short i=0;(c=code[i])!='\0';num=0 /*每次循环使num归零*/ ){
if(c=='F'){
i+=3;
c=code[i];
while('0'<=c && c<='9'){//存储FW后面的num
num=num*10+c-'0';
c=code[++i];
}
dis+=num;
}
else if(c=='B'){
i+=3;
c=code[i];
while('0'<=c && c<='9'){//存储BK的num
num=num*10+c-'0';
c=code[++i];
}
dis-=num;
}
else if(c=='R'){
i+=7;
c=code[i];
while('0'<=c && c<='9'){//读取REPEAT后面的循环次数
num=num*10+c-'0';
c=code[++i];
}
while((c=code[++i])!=']'){//读取[]中间的代码
x[strlen(x)]=c;
}
i--;
dis+=num*decode(x);
for(int i=0;i<strlen(x);i++)//将字符数组x归零
x[i]='\0';
i++;
}
else i++;
}
return dis;
}
int main(){
char code[255];
scanf("%[^\n]",&code);//导入本行logo代码
int a=decode(code);
printf("%d",((a>=0)?a:-a) /*绝对值*/ );
return 0;
}
30ms,776KB,代码长度只有1.27KB