题解 P1322 【logo语言】

· · 题解

经过2天的调试,我终于AC了。

WA->RE->MLE->AC!

坑点:

看了一下好像只有我一个人是导入全部字符串再一起处理的

#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