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;
}
posted @ 2018-08-14 19:19  MCH__ds  阅读(160)  评论(0编辑  收藏  举报