Description
输入一段无输入的合法brain fuck语句,输出运行结果
Brain fuck语句中字符的含义如下
Input
上述语句
Output
运行结果
Sample Input
+++++++++++++++++++++++++++++++++.[->+<]>++.
Sample Output
!#
HINT
(样例输出末尾无换行)
分析:
模拟题 直接上代码 这里 用创建一个新的指针并取代原来的 的方式实现“>”
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<string>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<iomanip>
#include<iostream>
#define inf 0x3f3f3f3f
#define LL long long
#define ULL unsigned long long
#define Min(a,b) (((a)<(b))?(a):(b))
#define Max(a,b) (((a)>(b))?(a):(b))
#define fast ios_base::sync_with_stdio(false)
using namespace std;
struct node
{
int va;
node *a,*b;
node(int x,node *aa,node *bb)
{
va=x; a=aa; b=bb;
}
node(){}
};
string s;
node *temp,*p;
void solve(int x,int y)
{
for(int i=x;i<y;i++)
{
if(s[i]=='+') p->va++;
else if(s[i]=='-') p->va--;
else if(s[i]=='>')
{
if(p->b==NULL)
{
temp=new node(0,p,NULL);
p->b=temp;
}
p=p->b;
}
else if(s[i]=='<')
{
if(p->a==NULL)
{
temp=new node(0,NULL,p);
p->a=temp;
}
p=p->a;
}
else if(s[i]==',')
{
i++;
p->va=s[i];
}
else if(s[i]=='.')
{
cout<<(char)(p->va);
}
else if(s[i]=='[')
{
int j=i+1;
while(s[j]!=']') j++;
while(p->va != 0) solve(i+1,j);
i=j;
}
}
}
int main()
{
int len;
while(cin>>s)
{
p=new node(0,NULL,NULL);
len=s.length();
solve(0,len);
}
return 0;
}
/**************************************************************
Problem: 1724
User: zjut_22
Language: C++
Result: Accepted
Time:0 ms
Memory:1676 kb
****************************************************************/