UVA11956 Brainfuck
题意
出门右转https://www.luogu.org/problemnew/show/UVA11956
题解
开一个数组,模拟 BrainFuck 程序的执行流程。
然后模拟即可。
提示:输出二位大写十六进制数:printf("%02X", val)
调试记录
- 调试忘记去了 QaQ
- 输出时末尾有空格导致 PE
代码
#include <bits/stdc++.h>
using namespace std;
char cmd[100005];
int mem[105];
void run(char * cmd) {
char *c = cmd;
memset(mem, 0, sizeof(mem));
int * p = mem;
for (; *c; ++c) {
switch(*c) {
case '>': // 当前指针后移一位
++p;
if (p - mem == 100) p = mem;
break;
case '<': // 当前指针向前移一位
if (p == mem) p = mem + 100;
--p;
break;
case '+': // 当前指针值 + 1
++*p;
if(*p == 256) *p=0;
break;
case '-': // 当前指针值 - 1
--*p;
if (*p == -1) *p = 255;
break;
}
}
}
void dumpmem() { // 输出内存中的东西
for (int i=0; i<99; i++)
printf("%02X ", mem[i]);
printf("%02X\n", mem[99]); // 注意行末不能有空格
}
int main() {
int T, s=0;
scanf("%d", &T);
while (T--) {
scanf("%s", cmd);
run(cmd);
printf("Case %d: ", ++s);
dumpmem();
}
return 0;
}