GESP2024年3月认证C++七级
一、单选题(每题2分,共30分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | B | C | D | C | D | B | A | B | A | C | C | B | C | A | B |
1、下列关于排序的说法 ,正确的是( )。
A.冒泡排序是最快的排序算法之⼀。
B.快速排序通常是不稳定的。
C.最差情况 ,
个元素做归并排序的时间复杂度为
。
D.以上均不正确。
【答案】B
【考纲知识点】排序算法
【解析】冒泡排序时间复杂度为O(n2),不是最快的排序算法,归并排序的时间复杂度为O(nlogn) ,快速排序是不稳定的排序算法。
2、下⾯的程序属于哪种算法( )。
A.贪⼼算法
B.动态规划
C.深度优先搜索
D.⼴度优先搜索
【答案】C
【考纲知识点】搜索算法
【解析】代码采用递归的写法,每次从queue(n)转移到queue(n+1),符合深度优先搜索的代码风格。
3、下⾯有关C++类的说法 ,错误的是( )。
A. C++类对象销毁时 ,会执⾏析构函数。
B. C++类可以通过定义构造函数实现⾃动类型转换。
C. C++类可以通过重载[]运算符实现通过给定下标访问数组成员的元素。
D. C++类可以包含任意类型的成员变量。
【答案】D
【考纲知识点】类的创建
【解析】C++类不能包含自身,也不能包含定义在它下面的类。
4、⼀个连通的简单无向图 ,共有28条边 ,则该图⾄少有( )个顶点。
A. 6
B. 7
C. 8
D. 9
【答案】C
【考纲知识点】图
【解析】n个点的连通的简单无向图至多有n*(n-1)/2条边,当n=8时,8*7/2=28,故选C。
5、以下哪个⽅案不能合理解决或缓解哈希表冲突( )。
A.在每个哈希表项处 ,使⽤单链表管理该表项的冲突元素。
B.建⽴额外的单链表 ,⽤来管理所有发⽣冲突的元素。
C.使⽤不同的哈希函数再建⽴⼀个哈希表 ,⽤来管理所有发⽣冲突的元素。
D.⽤新元素覆盖发⽣冲突的哈希表项。
【答案】D
【考纲知识点】哈希表
【解析】不能使用新元素直接覆盖发生冲突的哈希表项,这样会造成之前的元素丢失。
6、 已知⼀颗⼆叉树的中序遍历序列为: {C F BAE D G} ,后序遍历序列为:{F C B E G DA} ,则下列说法中正 确的是( )。
A.该树是平衡⼆叉树。
B.该树的⾼为4。
C.该树有4个叶节点。
D.以上说法都不对。
【答案】B
【考纲知识点】树的遍历
【解析】首先根据中序遍历和后序遍历将树构造出来:
选项A,C显然错误,选项B正确,树高为4。
7、以下关于⼆叉排序树的说法 ,正确的是( )。
A.⼆叉排序树的中序遍历序列⼀定是有序的。
B.在含n个节点的⼆叉排序树中查找元素 ,最差情况的时间复杂度为O(log(n))。
C.⼆叉排序树⼀定是⼆叉平衡树。
D.以上说法都不对。
【答案】A
【考纲知识点】二叉排序树
【解析】二叉排序树的左子树小于等于根,右子树大于等于根,而中序遍历按照左中右的顺序进行遍历,所以得到的序列一定是有序的,A正确。选项B错误,最差情况n个节点的每个右子树均为空,此时查找的时间复杂度为O(n)。选项C错误,比如第6题图中的树不是二叉平衡树,但可以按中序遍历由小到大填入数字形成二叉排序树。
8、已知x为double类型的变量 ,且值⼤于0,则下列表达式的值⼀定⼤于0的是( )。
A. s in(x) / x
B. exp(x) - x
C. log(x) - x
D. x * x - x
【答案】B
【考纲知识点】常用数学函数
【解析】exp(x)是ex ,而指数函数增长的速度非常快,当x>0时ex一定大于x,选项A当π<x<2π时,sin(x)<0,选项C,当x=e时,log(x)-x=1-e<0,选项D,当x=0.5时,x*x-x=-0.25。
9、一个简单有向图有10个结点、30条边。再增加多少条边可以成为完全图。( )
A. 60
B. 70
C. 15
D. 20
【答案】A
【考纲知识点】图
【解析】10个点的有向完全图共有10*9=90条边,需要再增加60条边。
10、下列选项中,哪个可能是下图的深度优先遍历序列( )。
A. 8, 6, 1, 5, 3, 4, 2, 10, 7, 12, 11, 9
B. 7, 8, 6, 4, 2, 1, 5, 3, 12, 9, 11, 10。
C. 8, 10, 12, 9, 11, 4, 5, 3, 2, 1, 6, 7
D. 7, 8, 10, 9, 11, 12, 4, 5, 1, 2, 3, 6。
【答案】C
【考纲知识点】图的遍历
【解析】选项A 10后面不能接7,选项B 3后面不能接12,选项D 10后面不能接9。
11、下⾯schedule函数的时间复杂度为( )。
-
O(n)
-
O(log(n))
-
O(n log(n))
-
O(n2)
【答案】C
【考纲知识点】时间复杂度分析
【解析】schedule函数由两部分组成,一个是sort排序,另一个是遍历p数组,sort复杂度为O(n logn),遍历复杂度为O(n),总复杂度为O(n logn)。
-
下⾯ search 函数的平均时间复杂度为( )。
A. O(n)
B. O(log(n))
C. O(1)
D.可能⽆法返回
【答案】B
【考纲知识点】时间复杂度分析,二分查找
【解析】容易发现代码是在进行二分查找,每次查找区间减半,所以复杂度为O(logn)。
13、下⾯count_triple函数的时间复杂度为( )。
A. O(N)
B. O(N2)
C. O(N3)
D. O(N4)
【答案】C
【考纲知识点】时间复杂度分析
【解析】三重for循环,每个循环的上界都是n,总复杂度为O(N3)。
14、下⾯程序的输出为( )。
A. 6
B. 13
C.20
D.⽆法正常结束。
【答案】A
【考纲知识点】递归,递推
【解析】使用递推的方式,从小到大依次计算出down(1~6)分别为1,0,1,2,3,6,故选A。
15、 下⾯的程序使⽤邻接矩阵表达的带权⽆向图 ,则从顶点0到顶点3的最短距离为( )。
A. 6
B. 7
C. 8
D. 9
【答案】B
【考纲知识点】最短路
【解析】可以从0->1->2->3,距离为2+1+4=7。,选B。
二、判断题(每题2分,共20分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | √ | × | √ | × | × | √ | × | √ | √ | √ |
1、祖冲之是南北朝时期杰出的数学家、天⽂学家 ,其主要贡献在数学、天⽂历法和机械制造三⽅⾯ 。他⾸次将 “ 圆周率”精算到⼩数第七位, 即在3. 1415926和3. 1415927之间。
【答案】正确
【考纲知识点】计算机历史
【解析】祖冲之发现了圆周率,并计算到了小数第七位。
2、C++语⾔中 ,表达式 2 ^ 3 的结果类型为int、值为8。( )
【答案】错误
【考纲知识点】位运算
【解析】2^3=
-
⼀棵有N个节点的完全⼆叉树,则树的深度为[log2(N)]+1 。( )
【答案】正确
【考纲知识点】树
【解析】一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。具有n个结点的完全二叉树的深度为[log2(n)]+1。
4、能⽤动态规划解决的问题 ,⼀般也可以⽤贪⼼法解决 ,但动态规划的效率更⾼ 。( )
【答案】错误
【考纲知识点】动态规划,贪心
【解析】能用动态规划解决的问题 ,不一定可以⽤贪⼼法解决。
5、使⽤math.h或cmath头⽂件中的正弦函数 ,表达式 s in(30) 的结果类型为double 、值约为0.5。( )
【答案】错误
【考纲知识点】常用数学函数
【解析】sin()函数的参数是弧度而不是角度。
6、要求出简单有向图中从顶点A到顶点B的最短路径 ,在深度优先搜索和⼴度优先搜索中选择 ,⼴度优先更适 合 。( )
【答案】正确
【考纲知识点】搜索
【解析】广度优先搜索第一次遍历到一个点时,经过的路径长度就是最短的,广度优先搜索更适合于查找最短路径。
7、某N个表项的哈希表 ,在发⽣哈希函数冲突时采⽤向后寻找空位的⽅法解决冲突 。其查找操作的平均时间复 杂度为O(1), 即使当该哈希表的每个表项都有元素时 ,查找操作的平均时间复杂度仍为O(1)。( )
【答案】错误
【考纲知识点】哈希表
【解析】在哈希表中查找某个元素时,如果该元素的哈希值所在的位置不是该元素,则需要往后进行比较,查找复杂度会超过O(1)。特别的,当该哈希表的每个表项都有元素时,如果待查找元素不在该哈希表中,时间复杂度可以达到O(n)。
8、动态规划有递推实现和递归实现 ,有时两种实现的时间复杂度不同 。( )
【答案】正确
【考纲知识点】动态规划
【解析】动态规划的递推实现可能会导致重复计算,从而提高时间复杂度。动态规划的递归实现有时会由于自顶向下比自底向上更难(例如,自顶向下需要找到所有因数,自底向上只需要找到所有倍数),从而提高时间复杂度。
9、围棋游戏中 ,判断落下⼀枚棋⼦后是否会提掉对⽅的⼦ ,可以使⽤泛洪算法来实现 。( )
【答案】正确
【考纲知识点】搜索
【解析】假设落下的是白子,则可以从该子周围四个有黑子的位置分别开始进行泛洪算法,若某个区间全部是黑子、没有空位,则该区间需要被提掉。
10、类B继承了抽象类A,但未实现类A中的纯虚函数f,则类B不能直接实例化 。( )
【答案】正确
【考纲知识点】类的创建
【解析】因为类B没有实现类A中的纯虚函数f,若将B实例化,则B没有办法执行函数f。
三、编程题(每题25分,共50分)
题号 | 1 | 2 |
答案 |
1、交流问题
问题描述
来⾃2所学校A校、B校的 Ⅳ 名同学相聚在⼀起相互交流 ,⽅便起见 ,我们把这些同学从1⾄N编号 。他们共进 ⾏了 M次交流 ,第 i次交流中 ,编号为 ui,vi的同学相互探讨了他们感兴趣的话题 ,并结交成为了新的朋友。
由于这次交流会的⽬的是促进两校友谊, 因此只有不同学校的同学之间会交流, 同校同学并不会相互交流。
作为A校顾问 ,你对 B校的规模⾮常感兴趣 ,你希望求出 B校⾄少有⼏名同学、⾄多有⼏名同学。
输入描述
第⼀⾏两个正整数N, M ,表⽰同学的⼈数 ,交流的次数。
接下来M⾏ ,每⾏两个正整数 ui,vi,表⽰⼀次交流。
题⽬保证输⼊合法, 即交流⼀定是跨校开展的。
输出描述
输出⼀⾏两个整数 ,⽤单个空格隔开 ,分别表⽰ B校⾄少有⼏名同学、⾄多有几名同学。
特别提醒
在常规程序中 ,输⼊ 、输出时提供提⽰是好习惯 。但在本场考试中, 由于系统限定 ,请不要在输⼊ 、输出中附带任 何提⽰信息。
样例输入1
样例输出1
样例输入2
样例输出2
数据规模
对于30的测试点 ,保证 Ⅳ ≤ 17,M ≤ 50;
对于60的测试点 ,保证 N ≤ 500 ,M ≤ 2000;
对于100的测试点 ,保证 N ≤ 105 ,M ≤ 2 ×105。
【题目大意】给定n个点,这些点要么属于A类,要么属于B类,给定m条边,一条边的两个端点必然一个属于A类,另一个属于B类,求属于B类的点的个数可能的最小值和最大值。
【考纲知识点】图的遍历
【解题思路】按照题目的输入进行连边,此时可以将整张图分为若干个连通块,对于每一个连通块都进行01染色,设颜色为0和1的点的个数分别为x,y,则B类点的数量即可以是x也可以是y,让min_B+=min(x,y),max_B+=max(x,y),最后输出min_B和max_B即可。
【参考程序】
2、俄罗斯⽅块
问题描述
⼩杨同学⽤不同种类的俄罗斯⽅块填满了⼀个⼤⼩为n x m 的⽹格图。
⽹格图由n × m 个带颜⾊⽅块构成 。⼩杨同学现在将这个⽹格图交给了你 ,请你计算出⽹格图中俄罗斯⽅块的种类 数。
如果两个同⾊⽅块是四连通(即上下左右四个相邻的位置) 的 ,则称两个同⾊⽅块直接连通 ;若两个同⾊⽅块同时 与另⼀个同⾊⽅块直接或间接连通 ,则称两个同⾊⽅块间接连通 。⼀个俄罗斯⽅块由⼀个⽅块和所有与其直接或间 接连通的同⾊⽅块组成 。定义两个俄罗斯⽅块的种类相同当且仅当通过平移其中⼀个俄罗斯⽅块可以和另⼀个俄罗 斯⽅块重合 ;如果两个俄罗斯⽅块颜⾊不同 ,仍然视为同⼀种俄罗斯⽅块。
例如 ,在如下情况中 ,⽅块 1和⽅块2是同⼀种俄罗斯⽅块 ,⽽⽅块 1和⽅块3不是同⼀种俄罗斯⽅块。
输入格式
第一行包含两个正整数n,m,表示网格图的大小。
对于之后n行,第i行包含m个正整数ai1,ai2,…..,aim,表示该行m个方块的颜色。
输出格式
输出⼀个⾮负整数 ,表⽰俄罗斯⽅块的种类数。
样例1
样例解释
7种类型的俄罗斯方块如下:
数据范围
对于全部数据,保证有1≤n,m≤ 500,0≤aij≤5002。
【题目大意】给定一个由若干个不同种类的俄罗斯方块构成的n*m的网格图,求有多少种不同种类的俄罗斯方块,相同种类的俄罗斯方块定义为仅通过平移可以重合。
【考纲知识点】图的遍历,哈希表
【解题思路】通过泛洪算法将所有的俄罗斯方块找出来,然后设计一个哈希算法进行哈希,该哈希算法必须保证与俄罗斯方块的具体位置无关,仅与形态有关,一个比较好的方法是将所有位置与该俄罗斯方块的首位置做差并排序,然后对这个序列进行哈希,设计哈希算法时要尽量避免冲突。最后判断有多少个不同的哈希值即可。
【参考程序】