logo语言
题目描述
Logo 语言命令可以指挥海龟在屏幕中爬行。本问题只使用 Logo 语言的三个语句:前进 FD
,倒退 BK
和重复 REPEAT
,因此,海龟只在一条直线上来回爬行。输入一行 logo 的命令行,输出海龟在屏幕中离开原来位子的距离(假设屏幕很大,可以让海龟移开
1
0
9
10^9
109 的距离)。
例如:
-
输入
FD 100
,输出: 100 100 100。 -
输入
FD 100 BK 150
, 输出: 50 50 50。 -
输入
REPEAT 5[FD 100 BK 50]
, 输出: 250 250 250。 -
输入
REPEAT 5[FD 50 REPEAT 10[FD 100]]
, 输出: 5250 5250 5250。
输入格式
一行,一个字符串,符合上述规定的 logo 命令行。
输出格式
一个数据,海龟离开原来位子的距离。
样例 #1
样例输入 #1
FD 100
样例输出 #1
100
提示
每个语句输入数据的绝对值不超过 1000 1000 1000。输出结果不会超过 1 0 9 10^9 109。
思路
本道题就是单纯模拟这个思路。
拓展:对于这个字符串的,然后要一层一层深入进去的,我们就得用递归的方式,之前的 正则表达式 的那道题采用的也是这种思路。
代码(离线版)
#include<iostream>
using namespace std;
string a;
int n,x;
int f(){
int l=0;
while(x<n){
if(a[x]==']')break;
if(a[x]=='R'){
x+=7;
int sum=0;
while(a[x]>='0'&&a[x]<='9'){
sum=sum*10+a[x++]-'0';
}
l+=f()*sum;
x++;
}
if(a[x]=='B'){
x+=3;
int sum=0;
while(a[x]>='0'&&a[x]<='9'){
sum=sum*10+a[x++]-'0';
}
l-=sum;
}
if(a[x]=='F'){
x+=3;
int sum=0;
while(a[x]>='0'&&a[x]<='9'){
sum=sum*10+a[x++]-'0';
}
l+=sum;
}
if(a[x]==' '||a[x]=='[')x++;
}
return l;
}
int main(){
getline(cin,a);
n=a.size();
cout<<abs(f());
return 0;
}
代码(在线版)
//对于有多个括号的,我们要用递归
#include<iostream>
#include<algorithm>
using namespace std;
int f(){
string b;
int n;
char t,c;
int l=0;
while(cin>>c){
if(c==']')break;
cin>>b>>n;
// cout<<n<<" "<<l<<endl;
if(c=='R'){
t=getchar();
l+=n*f();
t=getchar();
}
if(c=='B'){
t=getchar();
l-=n;
}
if(c=='F'){
t=getchar();
l+=n;
}
if(t==']'){
break;
}
// cout<<l<<" "<<n<<endl;
}
return l;
}
int main(){
cout<<abs(f());
return 0;
}