GESP:2024年3月 C++八级 真题及解析

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

【答案解析】

1.解释:答案选D。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第7张
2.解释:答案选C。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第8张
3.解释:答案选B。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第9张
4.解释:答案选A。
在C++中,拷贝构造函数是一种特殊的构造函数,用于使用一个已存在的对象来初始化一个新对象。以下是关于C++拷贝构造函数的正确性分析:
A. 错误:C++编译器会为没有显式定义拷贝构造函数的类自动生成一个默认的拷贝构造函数。因此,不实现拷贝构造函数并不会导致编译错误,除非类中包含了不能被默认拷贝构造的资源,比如指针或动态分配的资源,并且没有正确地管理这些资源的拷贝。
B. 正确:当对象作为函数参数以值传递方式传入时,会创建一个参数的副本,这时会调用拷贝构造函数。
C. 正确:当对象作为函数返回值,以值的传递方式从函数返回时,会创建一个临时对象,然后将这个临时对象复制到返回地址指向的位置,这个过程会调用拷贝构造函数。
D. 正确:使用一个已存在的对象来初始化另一个新对象时,会调用拷贝构造函数。
5.解释:答案选C。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第10张
GESP:2024年3月 C++八级 真题及解析 第11张
GESP:2024年3月 C++八级 真题及解析 第12张
6.解释:答案选D。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第13张
GESP:2024年3月 C++八级 真题及解析 第14张

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

截至考试当年3月,有关Cayley公式,简单介绍如下——

GESP:2024年3月 C++八级 真题及解析 第15张
GESP:2024年3月 C++八级 真题及解析 第16张

7.解释:答案选D。

详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第17张

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

截至考试当年3月,有关求三角形面积,简单罗列常用公式如下——

GESP:2024年3月 C++八级 真题及解析 第18张
GESP:2024年3月 C++八级 真题及解析 第19张

8.解释:答案选A。

在有n个元素的二叉排序树(BST)中进行查找,其时间复杂度取决于树的形状。由于二叉排序树的特性,它的每个节点的值都大于或等于其左子树中的所有节点,小于或等于其右子树中的所有节点。

●最好情况(平均情况下当树是平衡的):每次查找都能均匀地将搜索空间减半,直到找到目标或者搜索空。在这种理想情况下,查找的时间复杂度为 O(logn)。最好的情况当然是根节点就是查找目标
●最差情况(树退化成链表):如果树极度不平衡,比如所有的节点都在一边,形成了一个单向链表,那么查找的路径可能会达到最长,即从根节点一直走到叶子节点。在这种情况下,查找的时间复杂度为O(n),因为可能需要遍历所有n个元素才能找到目标。
9.解释:答案选D。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第20张
10.解释:答案选B。

本题考察求解斐波那契数列的时间复杂度。关于斐波那契数列的时间复杂度总结如下:如果用递推或者记忆化搜索求解,时间复杂度为O(n);如果是暴力递归,默认时间复杂度为O(2n;然后,更精确的时间复杂度应该如下所示。答题时哪个选项最精确选哪个。

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

截至考试当年6月,有关斐波那契数列的相关知识点,可以详见下图——

GESP:2024年3月 C++八级 真题及解析 第21张
GESP:2024年3月 C++八级 真题及解析 第22张

11.解释:答案选C。

详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第23张
GESP:2024年3月 C++八级 真题及解析 第24张

12.解释:答案选A。

详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第25张
GESP:2024年3月 C++八级 真题及解析 第26张

13.解释:答案选C。

详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第27张
GESP:2024年3月 C++八级 真题及解析 第28张
GESP:2024年3月 C++八级 真题及解析 第29张

14.解释:答案选B。

详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第30张

15.解释:答案选C。

详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第31张
GESP:2024年3月 C++八级 真题及解析 第32张
GESP:2024年3月 C++八级 真题及解析 第33张
GESP:2024年3月 C++八级 真题及解析 第34张

【答案解析】

1.解释:错误。

 运算符优先级问题:逗号运算符 , 是C++中优先级最低的运算符,赋值运算符 = 优先级远高于逗号运算符

 实际执行顺序被打乱:编译器会将语句解析为 (a), (b = b), (a);,最终仅执行了无意义的空操作,完全无法实现变量交换的预期效果,如下图所示——

GESP:2024年3月 C++八级 真题及解析 第35张
相关知识点的复习与拓展:

截至本次考试当年3月份,有关C++语言交换变量值的写法,罗列如下图所示——

GESP:2024年3月 C++八级 真题及解析 第36张
GESP:2024年3月 C++八级 真题及解析 第37张
GESP:2024年3月 C++八级 真题及解析 第38张
GESP:2024年3月 C++八级 真题及解析 第39张
GESP:2024年3月 C++八级 真题及解析 第40张
GESP:2024年3月 C++八级 真题及解析 第41张
GESP:2024年3月 C++八级 真题及解析 第42张

2.解释:错误。

详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第43张
3.解释:正确。
在同余理论中,有一个非常著名且重要的定理,叫做中国剩余定理,也称孙子定理或大衍求一术。这个定理起源于中国古代数学著作《孙子算经》中的“物不知数”问题,后由南宋数学家秦九韶系统总结。它主要解决一类特殊的一次同余方程组问题。简单来说,中国剩余定理指出:如果给定一组两两互质的模数,那么对于任意一组余数,都存在一个唯一的解(在特定范围内)满足所有的同余条件。这个定理在现代密码学、计算机科学等领域有广泛应用。
4.解释:错误。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第44张
5.解释:错误。
在哈希表中使用链表解决冲突时,每个哈希表项可能包含一个链表,链表中存储了所有映射到该哈希值的元素。这种情况下,查找元素的最差时间复杂度取决于链表的长度。

 最佳情况:如果哈希函数设计得很好,使得元素分布均匀,那么大多数情况下链表的长度会很短。在这种情况下,查找时间复杂度接近O(1),即常数时间内完成查找。

 平均情况:在平均情况下,如果链表的长度是L,那么查找时间复杂度是O(L),因为需要遍历链表中的每个元素来确定是否是查找的目标。

 最差情况:最差情况下,所有元素都映射到同一个哈希值,导致链表的长度等于元素总数N。在这种情况下,查找时间复杂度退化为O(N),因为需要遍历整个链表来找到目标元素。

所以,对于这个问题,答案是:最差时间复杂度为O(N)

6.解释:错误。

详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第45张
7.解释:正确。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第46张
8.解释:正确。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第47张
GESP:2024年3月 C++八级 真题及解析 第48张
9.解释:正确。
在最坏的情况下,一个有 n 个元素的二叉排序树(也称为二叉查找树或二叉搜索树)的查找时间复杂度可以达到O(n)。这是因为如果树的构建方式非常不平衡,比如所有元素都插入到树的同一侧,那么树就会退化成一个链表,查找操作将需要遍历整个链表。

然而,在平均情况下,如果树是平衡的,查找操作的时间复杂度可以降低到 O(logn)。这是因为在平衡的二叉排序树中,每个节点都有左右子树,且左右子树的大小大致相等,这样查找操作的深度就大致是树的深度,而平衡树的深度大约是 logn

在最好的情况下,如果查找的元素恰好是树的根节点,查找操作的时间复杂度可以是 O(1)

总结来说,二叉排序树的查找时间复杂度取决于树的平衡情况:

- 最坏情况:O(n)

- 平均情况:O(logn) 

- 最好情况:O(1)

10.解释:正确。
详细解析见下图——
GESP:2024年3月 C++八级 真题及解析 第49张
GESP:2024年3月 C++八级 真题及解析 第50张
GESP:2024年3月 C++八级 真题及解析 第51张
GESP:2024年3月 C++八级 真题及解析 第52张

GESP 2024年3月 C++八级 公倍数问题

#include<iostream>using namespace std;const int N = 1e6 + 10;int n, m, k;int f[N], g[N];// 统计1到N中每个数的倍数的个数voidwork(int N, int f[]){    for (int i = 1; i <= N; ++i)        for (int j = i; j <= k; j += i)            f[j]++;}intmain(){    cin >> n >> m >> k;    work(n, f);    work(m, g);    long long ans = 0;    for (int i = 1; i <= k; ++i)        ans += 1LL * i * f[i] * g[i];    cout << ans;    return 0;}

代码思路——

GESP:2024年3月 C++八级 真题及解析 第53张

GESP:2024年3月 C++八级 真题及解析 第54张
GESP:2024年3月 C++八级 真题及解析 第55张

GESP 2024年3月 C++八级 接竹竿

#include<bits/stdc++.h>#define int register unsignedusing namespace std;//define 是二重优化unsigned t,n,q;signedmain(){    //第一优化    ios::sync_with_stdio(false);    cin.tie(0);    cout.tie(0);    cin>>t;    while(t--){        cin>>n;        int f[15] = {0},r[150005] = {0};//r[i]表示第i个元素在其后第一次出现的位置,f[i]表示第i个元素当前出现的位置        for(int i = 1,x;i <= n;i++){            cin>>x;            r[f[x]] = i;            f[x] = i;        }        cin>>q;        while(q--){            int x,y;            cin>>x>>y;            int ans = 0;            for(int i = x;i <= y;i++){                if(r[i] < x || r[i] > y) ans++;//不在范围内                else i = r[i]; //快速地跳            }            cout<<ans<<"\n";        }    }    return 0;}

代码思路——

GESP:2024年3月 C++八级 真题及解析 第56张
GESP:2024年3月 C++八级 真题及解析 第57张

课程体系——

GESP:2024年3月 C++八级 真题及解析 第58张
需要无水印PDF格式文件,
或者课程体系咨询,
欢迎扫描下面二维码添加好友垂询。
GESP:2024年3月 C++八级 真题及解析 第59张

GESP:2024年3月 C++八级 真题及解析 第60张

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

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

喜欢您关注我们哦——

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