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;
}

转载于:https://www.cnblogs.com/mchmch/p/uva-11956.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值