likes
comments
collection
share

我是没想到是还可以这样秒出答案 ...

作者站长头像
站长
· 阅读数 20

起因

晚上在休闲游戏中,一网友发来信息求问,一道编程题。

咋一看,嘿 2023年1月浙江选考题(信息技术),挺新鲜,那就来看看吧。 聊了一下才知道,这是中考高考(6月28日晚23:05更正)选题。中考高考(6月28日晚23:05更正)就考这样的了吗?

我是没想到是还可以这样秒出答案 ... 我是没想到是还可以这样秒出答案 ...

一、题目

我是没想到是还可以这样秒出答案 ...

二、解析

因为题解想半天,没看明白要做的,就先直接上手代码去测试实验。通过足够多的次数去请求,就可以知道正确答案了(不符合出现的)。

后面恍然大悟会进一步讲解内容

二、代码测试

把该代码转成 java 对应的代码内容,并进行测试

public static void main(String[] args) {
    // 答案记录
    Map<String, Integer> ansMap = new HashMap<>();
    ansMap.put("AB##CD#", 0); // 选项A 答案
    ansMap.put("#######", 0); // 选项B 答案
    ansMap.put("#B##CDA", 0); // 选项C 答案
    ansMap.put("###ABCD", 0); // 选项D 答案
    for (int i = 0; i < 100000; i++) { // 10万次执行,看看 ABCD 答案是哪个一直没有出现
        String res = runWork(); // 出现的结果
        if (ansMap.get(res) == null){ // 出现和选项答案不一致的跳过
            continue;
        }
        // 出现一致的进行+1
        ansMap.put(res, ansMap.get(res) + 1);
    }
    // 输出结果
    System.out.println(ansMap.toString());
}

public static String runWork() {
    char[] a = {'A', 'B', '#', '#', 'C', 'D', '#'};
    char[] stk = new char[a.length];
    int top = -1;
    Random random = new Random();

    for (int i = 0; i < a.length; i++) {
        int op = random.nextInt(2);
        if (op == 1 && a[i] != '#') {
            top++;
            stk[top] = a[i];
            a[i] = '#';
        } else if (op == 0 && top != -1 && a[i] == '#') {
            a[i] = stk[top];
            top--;
        }
    }
    return String.valueOf(a);
}

三、测试结果

我是没想到是还可以这样秒出答案 ...

截图中可以看到,测试中,A、B、C 选项都出现了,不符合的是 D 选项,因此,正确答案是选项 D。

四、恍然大悟(真正解析)

仔细瞧命名, stk ,是栈(stack)的简写!可恶,这道题可以直接利用栈的知识去看选项去解了啊...

原字符数组是 'A', 'B', '#', '#', 'C', 'D', '#' 栈,就是先进后出。

选项内容解析
AAB##CD#对 a 字符数组都不进行拿出拿入,stk 字符数组就是空,也就是不变,那么结果可以出现
B#######对 a 字符数组的ABCD都拿走,最终 stk 字符数组里就是 DCBA,那么结果也可以出现
C#B##CDA对 a 字符数组都只拿A,并在最后一个的时候拿出最上层的。最上层只有一个 A ,那就拿出 A ,此时 stk 字符数组就为空了,那么结果可以出现
D###ABCD对 a 字符数组先拿A,stk 里就有 A ,但是B也需要拿,且 A 要放在 B 拿之前的后面,不能实现,那么结果是不可以出现的!

图解:

我是没想到是还可以这样秒出答案 ...

那么最终,也就能明白这套代码的意思了,就是随机可能去拿去里面的字母,ABCD,放到栈里再实现放到原数组中去。对栈的理解与使用解释了一下。答案选 D ,只有 D 不符合栈的进出。

文章小尾巴

文章小尾巴(点击展开)

文章写作、模板、文章小尾巴可参考:《写作“小心思”》   感谢你看到最后,最后再说两点~  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~   我是南方者,一个热爱计算机更热爱祖国的南方人。  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)