题目描述
bf是一种编程语言,全称为BrainFuck,因为题目名称不能太露骨,所以就简写成bf了。
这种语言的运行机制十分简单,只有一个大小为30000的有符号8位整数(范围[-128,127])的内存槽,和一个指向内存槽中位置的指针,在最初的时候指向内存槽的第一个整数。
这种语言的字符集也是十分的简单,只有+-,.><[]。
字符|意义
< |指针所指向的内存地址减一。
> |指针所指向的内存地址加一。
+ |指针所指向的内存里面的数值加一。
- |指针所指向的内存里面的数值减一。
. |输出当前指针所指向的内存里面的数值(以字符形式输出)。
, |将读入缓冲区中的一个字节送入当前指针指向的内存里面。如果读入缓冲区为空则送入-1。
[ |当前指针指向的内存里面的数值不为0时,重复执行与之相匹配的]之间的语句,直到回到[时当前指针指向的内存中的数值为0。
] |如上。
输入输出格式
输入格式:
输入数据若干行,代码有注释。直到一个$为代码截止。
$后面紧跟一个空格(不属于输入缓冲区),空格后面是输入缓冲区里面的内容,以一个空格和一个$截止。
输出格式:
输出这段代码的执行结果。
输入输出样例
说明
【数据范围】
对于10%的数据,没有循环。
对于另外10%的数据,循环没有嵌套。
对于100%的数据,输入的程序不会访问越界,输入的程序能够在10^6步内运行结束,|输入的字符串|<=30000。 字符在内存中的数值为字符所对应的Ascii码。
思路:模拟。
但是太麻烦了,所以就去copy了一下大佬的思路。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> char codes[30001]; char inputs[30001]; signed char data[30000]={0}; int down[30001],up[30001],tstack[15000]; char t; signed char * pdata; int main(){ int i=0,j=0,k=0,ncodes,ninputs; //i记录codes的索引,j记录inputs的索引,k记录tstack的索引 while((t=getchar())!='$') if(strchr("><.,+-[]",t)) codes[i++]=t; ncodes=i; //为代码的总字符数 codes[ncodes]='