浙江工商大学2020年新生赛部分题解(二)

浙江工商大学2020年新生赛部分题解(一)
浙江工商大学2020年新生赛部分题解(三)

【本人的代码风格比较特殊,所以所有代码只提供了核心部分,不提供头文件、命名空间、main函数的部分,各位只需要参考逻辑即可】

站神与最简单的语言

吐槽

这题是我出的题
这道题的题面完全是从Wikipedia上复制粘贴过来的,我给个截图给大家比对一下
这是题面
题面
这是Wikipedia上的内容
Wikipedia
(是不是发现了一种全新的出题方式)
这道题当时被评定为倒数第二难的题(也就是除了防AK题中最难的那道题)

后台的数据其实也很简单,其实都是这个网站帮忙生成的,导致其实后台数据挺弱的

题解

回到题面,大致意思是让你实现一个BrainFuck语言的编译器
为了照顾新生,我特意去掉下面几种特殊的情况:

  • 存在死循环
  • 存在括号嵌套(新生可以考虑一下怎么做)
  • 不需要考虑输入
  • 不需要考虑括号是否合法

是不是突然感觉学长对你们还是很好的
然后为了加大一下难度(其实并没有),增加了一些特殊条件的判断

这道题最难的地方,我觉得应该是两点

  • 如何处理循环
  • 如何处理出现程序错误时的问题

由于没有括号的嵌套,我们只需要记录下上一个[所在的位置,当我们遇到]的时候,直接转跳到上一个保存的位置即可。因为括号的匹配必定合法

第二个问题,其实最方便的解法就是在输出错误信息后,使用exit(0);或者return 0;直接结束程序就行

最后实际交的代码数量也不多,也算是符合最难的题的预期

AC code

void solve() {
   
   
    vector<char> data(1, 0);
    int pos = 0;
    int cnt = 0;

    string str;
    cin >> str;

    int miss = 0;
    for (int i = 0; i < str.size(); ++i) {
   
   
        if (miss == -1) {
   
   
            if (str[i] == ']') miss = 0;
            continue;
        }
        if (cnt == 1000000) {
   
   
            cout << "Endless Code" << endl;
            return;
        }
        switch (str[i]) {
   
   
            case '>':
                pos<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值