GESP:2023年12月 C++五级 真题及解析

四季读书网 6 0
GESP:2023年12月 C++五级 真题及解析
老师已为大家备好电子打印版,需要完整电子版文件的朋友,可以拉到文末查看。
GESP:2023年12月 C++五级 真题及解析-第1张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第2张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第3张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第4张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第5张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第6张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第7张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第8张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第9张图片-四季读书网

【答案解析】

1.解释:答案选C。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第10张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第11张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第12张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第13张图片-四季读书网

2.解释:答案选C。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第14张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第15张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第16张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第17张图片-四季读书网

相关知识点的复习与拓展:

截至考试当年12月,有关归并排序的实现原理,可以参考下面的视频,加深理解——
关注
重播 分享 赞

3.解释:答案选D。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第18张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第19张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第20张图片-四季读书网

4.解释:本题官方给出的正确答案是选项A,但是存在巨大争议。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第21张图片-四季读书网

5.解释:答案选B。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第22张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第23张图片-四季读书网

6.解释:答案选A。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第24张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第25张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第26张图片-四季读书网

7.解释:答案选C。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第27张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第28张图片-四季读书网

相关知识点的复习与拓展:

截至考试当年3月,有关快速排序的实现原理,可以参考下面的视频帮助理解——

关注
重播 分享 赞

8.解释:答案选B。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第29张图片-四季读书网

9.解释:答案选D。

详细解析如下——

● 首先看代码逻辑:该递归实现的二分查找,核心是每次将搜索区间折半缩小范围,符合二分查找的定义,因此选项A的描述是正确的。

● 二分查找本身属于典型的分治算法应用:将大的搜索问题拆分为更小的子区间搜索子问题,子问题的结果合并后就是原问题的结果,因此选项B的描述是正确的。

● 代码中 _binarySearch 函数在内部调用了自身,是典型的递归实现方式,因此选项C的描述是正确的。

● 动态规划算法的核心是通过存储子问题的重复计算结果,避免重复求解重叠子问题,该二分查找的实现不存在重叠子问题的求解、也没有状态转移和存储子问题解的逻辑,完全不属于动态规划算法的范畴,因此选项D的描述是错误的,是本题要选出的错误说法。

10.解释:答案选B。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第30张图片-四季读书网

11.解释:答案选D。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第31张图片-四季读书网

12.解释:答案选B。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第32张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第33张图片-四季读书网

13.解释:答案选B。

本题考察计算机基础知识。通信卫星可以转发无线电信号,实现通信地球站间或地球站与航天器间的无线电通信,因此具有信号中继作用,选项B正确。

14.解释:答案选C。

详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第34张图片-四季读书网

15.解释:答案选B。

详细解析如下——

冒泡排序属于交换类排序算法,其核心思想是通过相邻元素之间的比较和交换,逐步将最大或最小元素"冒泡"到序列末尾,最终实现整体有序。在选项中:

A. 希尔排序:属于插入类排序,是插入排序的改进版本,通过分组插入逐步缩小增量,不属于交换类。

B. 快速排序:属于交换类排序算法,其核心思想是通过基准元素划分序列,递归地对左右子序列进行排序,过程中涉及大量元素交换,与冒泡排序同属交换类。

C. 堆排序:属于选择类排序算法,通过堆结构选择最大或最小元素并交换到末尾,不属于交换类。

D. 插入排序:属于插入类排序算法,通过逐步构建有序序列实现排序,与冒泡排序原理不同。

因此,与冒泡排序同属交换类排序算法的是快速排序。选项B正确。

相关知识点的复习与拓展:

截至考试当年12月,有关十大经典排序算法的特点对比,可以参考下图帮助记忆——

GESP:2023年12月 C++五级 真题及解析-第35张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第36张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第37张图片-四季读书网

【答案解析】

1.解释:正确。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第38张图片-四季读书网

相关知识点的复习与拓展:

截至考试当年12月,有关十大经典排序算法的特点对比,可以参考下图帮助记忆——

GESP:2023年12月 C++五级 真题及解析-第39张图片-四季读书网

2.解释:错误。(有争议)

因为考纲中对二分法同时列出了"二分查找"和"二分答案(或二分枚举)",本题的官方答案"错误"存在争议。详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第40张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第41张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第42张图片-四季读书网
3.解释:错误。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第43张图片-四季读书网
4.解释:正确。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第44张图片-四季读书网
5.解释:正确。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第45张图片-四季读书网
6.解释:正确。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第46张图片-四季读书网
7.解释:错误。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第47张图片-四季读书网
8.解释:正确。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第48张图片-四季读书网
9.解释:正确。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第49张图片-四季读书网
10.解释:正确。
详细解析如下图所示——
GESP:2023年12月 C++五级 真题及解析-第50张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第51张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第52张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第53张图片-四季读书网

2023年12月 C++五级 小杨的幸运数

#include<bits/stdc++.h>using namespace std;intmain(){    // 关闭cin与stdio同步,加速cin输入速度    ios::sync_with_stdio(false);    // 解绑cin和cout,cout输出不会强制刷新cin缓冲区,进一步加速输入    cin.tie(nullptr);    long long a;   // 超级幸运数的下界    int N;         // 待判断的数的个数    if (!(cin >> a >> N)) return 0;    // 先把所有询问读进来,顺便求最大值,用来确定后面数组要开多大    vector<int> x(N);    int xmax = 0;    for (int i = 0; i < N; i++) {        cin >> x[i];        if (x[i] > xmax) xmax = x[i];    }    // 求 i0 = ceil(sqrt(a)),即第一个满足 i*i >= a 的整数 i    // s0 = i0 * i0 就是最小的超级幸运数    // 这里循环次数最多 1000 次(因为 a <= 1e6),可忽略不计    long long i0 = 1;    while (i0 * i0 < a) i0++;    long long s0 = i0 * i0;    // 数组上界:x 幸运化后的结果 <= ceil(x/s0)*s0 <= x + s0 - 1    // 所以开到 xmax + s0 就一定能装下所有答案,+5 只是留点余量    // 最坏情况:a = 1e6 -> i0 ≈ 1000 -> s0 ≈ 1e6,MAXV ≈ 2e6,内存约 9MB,安全    int MAXV = (int)(xmax + s0 + 5);    // lucky[v] = 1 表示 v 是幸运数    vector<char> lucky(MAXV + 1, 0);    // 筛法预处理:枚举每个超级幸运数 s = i * i(要求 i >= i0,即 s >= a),    // 把 s 本身以及 s 的所有倍数全部标记为幸运数    for (long long i = i0; i * i <= MAXV; i++) {        long long s = i * i;                          // s 是一个超级幸运数        for (long long j = s; j <= MAXV; j += s)      // 枚举 s 的所有倍数            lucky[(int)j] = 1;                        // 倍数 = 幸运数    }    // 后缀预处理:nxt[i] = i 及其右边第一个幸运数的位置    // 从后往前扫,如果 i 本身不是幸运数,就继承 i+1 的答案    // 这样"一直 +1 直到变成幸运数"就变成了一次 O(1) 查表    vector<int> nxt(MAXV + 2, -1);    for (int i = MAXV; i >= 1; i--)        nxt[i] = lucky[i] ? i : nxt[i + 1];    // 逐个询问输出    for (int i = 0; i < N; i++) {        if (lucky[x[i]]) cout << "lucky\n";   // 本来就是幸运数        else             cout << nxt[x[i]] << '\n';  // 输出幸运化后的结果    }    return 0;}

代码思路——

GESP:2023年12月 C++五级 真题及解析-第54张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第55张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第56张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第57张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第58张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第59张图片-四季读书网
GESP:2023年12月 C++五级 真题及解析-第60张图片-四季读书网

2023年12月 C++五级 烹饪问题

#include<bits/stdc++.h>using namespace std;intmain(){    // 关闭cin与C标准IO的同步,大幅加快cin读取速度    ios::sync_with_stdio(false);    // 解绑cin和cout,cout输出不会强制刷新cin缓冲区,进一步加速输入    cin.tie(nullptr);    int N;    cin >> N;    vector<unsignedint> a(N);    // 读取所有食材的美味度    for(int i = 0; i < N; i++){        cin >> a[i];    }    // res:贪心构造的答案,初始二进制全0    int res = 0;    // 从第30位开始向下枚举(int最大到2^30,共31位:bit 30 ~ 0)    for(int bit = 30; bit >= 0; bit--){        // mask = 已确定的高位res,再尝试把当前bit位设为1,测试是否可行        int mask = res | (1 << bit);        int cnt = 0; // 记录满足条件的数字个数        for(auto num : a){            // 如果 num & mask == mask,说明num拥有mask里所有二进制为1的位            if( (num & mask) == mask ){                cnt++;                // 找到2个满足条件的数就足够,提前退出循环,节省时间                if(cnt >= 2) break;            }        }        // 存在至少两个数同时包含mask的所有1位,这一位可以保留为1        if(cnt >= 2){            res = mask;        }        // 否则:这一位不能取1,res保持不变,继续测试更低的位    }    // 输出最大的契合度(两个数按位与的最大值)    cout << res << endl;    return 0;}
GESP:2023年12月 C++五级 真题及解析-第61张图片-四季读书网

课程体系——

GESP:2023年12月 C++五级 真题及解析-第62张图片-四季读书网
需要无水印PDF格式文件,
或者课程体系咨询,
欢迎扫描下面二维码添加好友垂询。
GESP:2023年12月 C++五级 真题及解析-第63张图片-四季读书网

GESP:2023年12月 C++五级 真题及解析-第64张图片-四季读书网

▍ 声明:本文整理自网络,如有侵权,请联系删除。

本公号刊载此文,是出于合法合理地分享和传播信息,扩大大受众范围,促进学术交流,推动共同进步之目的。公众号持有人郑重声明,本文的发布,将严格遵守相关规定和法律法规,不侵犯任意潜在作者的权益,不改变引用原文(若有)的意图和内容。若有来源标注错误或侵犯了您的合法权益,请随时与我们联系协商,联系(QQ):993225721,我们将及时更正、删除。文章若有幸得到转载,首先,公众号持有人感谢转载人为读者阅读提供了有价值的信息和知识,希望文章能够在被转载的平台上得到更广泛的传播和交流;其次,转载人应充分考虑到转载动作本身所可能带来的相应的风险和责任,包括但不限于侵犯知识产权、侵犯他人权益等行为所引起的法律责任,确保本文的合法传播和使用。同时,本人也极其愿意在转载过程中尽力配合转载人了解、关注、规避、消除相关的潜在风险。若转载人有相任何关疑虑,同样欢迎随时与我们联系协商,联系(QQ):993225721。

喜欢您关注我们哦——

抱歉,评论功能暂时关闭!