GESP2024年6月认证C++七级真题解析

一、单选题(每题2分,共30分)

题号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

答案

D

B

A

D

D

A

A

C

D

B

C

A

B

B

C

1、下列C++代码的输出结果是( )。

图片

A. 0

B. 1

C. 0.5

D. 0.7071

【答案】:B

【解析】:计算机中的三角函数使用的是弧度,3.1415926可以看作Π,也就是求sin(Π/2)=1.

2、对于如下图的⼆叉树 ,说法正确的是(  )。

图片

A.先序遍历是 132 。

B.中序遍历是 123 。

C.后序遍历是312。

D.先序遍历和后序遍历正好是相反的。

【答案】:D

【解析】:先序遍历为123,中序遍历为132,后序遍历为321,答案选D

3、已知两个序列s1= {1,3,4,5,6,7,7,8,1} 、s2= {3,5,7,4,8,2,9,5,1} ,则它们的最长公共⼦序列是 ( )  。

A. {3,5,7,8,1}  

B. {3,4,5,7,8}  

C. {5,7,8}

D. {3,5,7,9,1}

【答案】:A

【解析】:最长公共子序列指最长的序列满足即是s1的子序列又是s2的子序列,选项A满足要求且是最长的

4、关于序列{2,7,1,5,6,4,3,8,9}, 以下说法错误的是(  )。

A. {2,5,6,8,9} 是它的最长上升⼦序列

B. {1,5,6,8,9} 是它的最长上升⼦序列

C. {7,5,4,3} 是它的最长下降⼦序列

D. {1,5,6,8,9} 是它的唯⼀最长上升⼦序列

【答案】:D

【解析】:{2,5,6,8,9}也是它的最长上升子序列,并不唯一

5、关于图的深度优先搜索和⼴度优先搜索,下列说法错误的是( )。

A.⼆叉树是也是⼀种图。

B.⼆叉树的前序遍历和后序遍历都是深度优先搜索的⼀种。

C.深度优先搜索可以从任意根节点开始。

D.⼆叉树的后序遍历也是⼴度优先搜索的⼀种。

【答案】:D

【解析】:广度优先搜索往往使用队列按照节点的深度有序的方式依次遍历,很容易发现,后序遍历中节点的深度并不有序。

6、对于如下⼆叉树 ,下⾯访问顺序说法错误的是(  )。

图片

A. HDEBFIGCA不是它的后序遍历序列   

B. ABCDEFGHI是它的⼴度优先遍历序列

C. ABDHECFGI是它的深度优先遍历序列

D. ABDHECFGI是它的先序遍历序列

【答案】:A

【解析】:后序遍历可以记作左右根,上图的后序遍历为HDEBFIGCA,选项A错误

7、以下哪个方案不能合理解决或缓解哈希表冲突( )。

A.丢弃发生冲突的新元素。

B.在每个哈希表项处 ,使用不同的哈希函数再建立⼀个哈希表 ,管理该表项的冲突元素。

C.在每个哈希表项处 ,建立二叉排序树 ,管理该表项的冲突元素。

D.使用不同的哈希函数建⽴额外的哈希表 ,⽤来管理所有发生冲突的元素。

【答案】:A

【解析】:不能丢弃发生冲突的新元素

8、在C++中 ,关于运算符&,下⾯说法正确的是( )。

A. 2 & 3 的结果是true

B. 011 & 111 的结果是3

C. 3 & 6 的结果是2

D. 110 & 101 的结果是4

【答案】:C

【解析】:运算符&是按位与,结果类型为整类型,A错误。,数字3的二进制为11,6的二进制为110,所以3&6=。注意B和D选项中,011为八进制的9,而111、110、101则均为十进制。

9、下⾯关于图的说法正确的是( )。

A.在无向图中 ,环是指⾄少包含三个不同顶点 ,并且第⼀个顶点和最后⼀个顶点是相同的路径。

B.在有向图中 ,环是指⼀个顶点经过⾄少另⼀个顶点到⾃⾝的路径。

C.在有向图中 ,如果任意两个顶点之间都存在⼀条边 ,则这个图⼀定是强连通图。

D.在有向图中 ,所有顶点的⼊度和出度的总和就是图的边数的两倍。

【答案】:D

【解析】:每条有向边都会贡献一个入度和一个出度,所以所有顶点的⼊度和出度的总和就是图的边数的两倍,选项D正确。

10、图的存储和遍历算法 ,下⾯说法错误的是(  )。

A.图的深度优先搜索和⼴度优先搜索对有向图和⽆向图都适⽤ 。

B.图的深度优先搜索和⼆叉树的先序遍历道理是不⼀样的。

C.图的深度优先搜索需要借助栈来完成。

D.邻接表中 ,顶点vi对应链表中的边结点数⽬正好是顶点vi的度。

【答案】:B

【解析】:图的深度优先搜索和⼆叉树的先序遍历都基于深度优先的原理。

11、如下图所⽰的邻接表结构 ,表⽰的是下列哪个选项中的图?

图片

  1. 图片

  2. 图片

  3. 图片

  4. 图片

【答案】:C

【解析】:注意到存边方式是邻接表,0号点(V1)连向的是3号点(V4)和1号点(V2),1号点连向的是4,2,0号点,2号点连向的是4,3,1号点,依次类推,可以选出正确选项C。

12、如下图所示的邻接矩阵(inf表示无穷大) ,表⽰的是下列哪个选项中的图?

图片

  1. 图片

  2. 图片

  3. 图片

  4. 图片

【答案】:A

【解析】:注意到存边方式是邻接矩阵,0连向2,3,距离分别是12和30,1不连向任何人,2连向4,距离是32,依次类推,可以选出正确答案A。

  1. 下⾯程序的输出为( )。

图片

A. 5   

B. 8   

C. 13

D.⽆法正常结束。

【答案】:B

【解析】:容易发现这是斐波那契数列,可以使用递推的方式,算出斐波那契数列的前6项分别是1,1,2,3,5,8,答案为B。

14、下⾯count_triple函数的时间复杂度为( )。

图片

A. O(n)  

B. O(n2)

C. O(n3)

D. O(n4)

【答案】:B

【解析】:两层for循环,每层for循环的上界均为n,总时间复杂度为O(n2)

15、下列选项中 ,哪个可能是下图的深度优先遍历序列( )。

图片

A. 1, 3, 7, 5, 4, 2, 6, 8, 9

B. 9, 4, 2, 1, 3, 5, 7, 6, 8

C. 1, 3, 4, 2, 7, 6, 8, 9, 5

D. 9, 7, 6, 8, 4, 2, 1, 5, 3

【答案】:C

【解析】:深度优先遍历需要按照能走就走的原则进行遍历,A选项5后面应该是6,B选项3后面应该是7,D选项8后面应该是5

二、判断题 (每题 2 分,共 20 分)

题号

1

2

3

4

5

6

7

8

9

10

答案

×

×

×

×

×

1、C++语⾔中 ,表达式 6 & 5 的结果类型为int、值为1。

【答案】:错

【解析】:6的二进制位110,5二进制为101,6&5=4

2、冒泡排序是稳定的排序算法。

【答案】:对

【解析】:稳定的排序算法指值相同的元素在排序前后的相对顺序不变,冒泡排序是稳定的排序算法

3、唯⼀分解定理(算术基本定理)指出 ,每个⼤于1的⾃然数都可以唯⼀地分解成若⼲个素数的乘积 。 因此, 我们可以很容易的对给定的⾃然数 n进⾏质因数分解 ,时间复杂度仅为o(log(n))。

【答案】:错

【解析】:对n进行质因数分解的时间复杂度为O(sqrt(n)

4、C++语⾔中 ,可以为同⼀个类定义多个构造函数。

【答案】:对

【解析】:C++会根据参数的不同选择正确的构造函数。

5、使⽤math.h或cmath头⽂件中的对数函数 ,表达式 log(128)的结果类型为double 、值约为7.0。

【答案】:错

【解析】:log默认是以e为底。

6、⼀颗N层的⼆叉树 ,⾄少有2N 1个节点。

【答案】:错

【解析】:N层的二叉树,最少的节点数量为N。

7、⾮连通图不能使⽤⼴度优先搜索算法进⾏遍历。

【答案】:错

【解析】:非连通图需要进行多次广度优先搜索算法。

8、现使⽤有N个表项的哈希表 ,从 M个元素中进⾏查找 。该哈希表为解决哈希函数冲突 ,为每个表项处建⽴单 链表存储冲突元素 。其查找操作的最坏情况时间复杂度为O(M)。

【答案】:对

【解析】:如果M个元素全部冲突,则需要去单链表进行查询,时间复杂度为O(M).

9、动态规划有递推实现和递归实现 ,对于很多问题 ,通过记录⼦问题的解 ,两种实现的时间复杂度是相同的。

【答案】:对

【解析】:使用递归算法并记录子问题的解就是动态规划中的记忆化搜索,和递推算法实现动态规划的时间复杂度一致

10、泛洪算法的递归⽅法容易造成溢出, 因此⼤的⼆维地图算法中 ,⼀般不⽤递归⽅法。

【答案】:对

【解析】:C++中栈空间一般比较小,递归层数过大容易造成栈溢出。

三、编程题(每题25分,共50分)

题号

1

2

答案

1、黑白翻转

题面描述

⼩杨有⼀棵包含n个节点的树 ,这棵树上的任意⼀个节点要么是⽩⾊ ,要么是⿊⾊ 。⼩杨认为⼀棵树是美丽树当且 仅当在删除所有⽩⾊节点之后 ,剩余节点仍然组成⼀棵树。

⼩杨每次操作可以选择⼀个⽩⾊节点将它的颜⾊变为⿊⾊ ,他想知道⾃⼰最少要执⾏多少次操作可以使得这棵树变 为美丽树。

输入格式

第⼀⾏包含⼀个正整数n,代表树的节点数。

第⼆⾏包含n个⾮负整数a1, a2, · · · , an,其中如果ai= 0 ,则节点i的颜⾊为⽩⾊ ,否则为⿊⾊ 。 之后 n - 1 行 ,每行包含两个正整数 xi, yi,代表存在⼀条连接节点xi和yi的边。

输出格式

输出⼀个整数 ,代表最少执⾏的操作次数。

样例1

图片

样例解释

将节点1和3变为⿊⾊即可使这棵树变为美丽树 ,此时删除⽩⾊节点 5,剩余⿊⾊节点仍然组成⼀棵树。

数据范围

图片

对于全部数据 ,保证有 1≤ n ≤105,0≤ ai≤1 。

【题目大意】

给定一棵树,节点的颜色为白色或黑色,要求将尽量少的白点染为黑点,满足去掉所有的白点后,剩余的黑点依然构成一棵树(n≤105)

【解题思路】

我们考虑一个树的哪些节点删除后,依然为一棵树。显然是所有叶子节点。在把所有叶子节点删去后,新的树的叶子节点依然可以继续删除。以此类推。也就是说,对于一个白点u,如果以u为根的子树中不存在黑点的话,那么这个白点就可以被删除,否则该白点需要被染为黑点,只需要一遍深度优先搜索,最终答案为n-黑色节点数量-以u为根的子树中不存在黑点的节点数量。还有一个特殊情况,即根节点也可能可以删除,解决方法是钦定一个黑色节点为根。

参考程序

图片

2、区间乘积

题面描述

⼩杨有⼀个包含n个正整数的序列A = [a1, a2, - , an]。

⼩杨想知道有多少对< l, r > ( 1 ≤l ≤r ≤n) 满⾜ai×ai+1×…×ar为完全平⽅数。 ⼀个正整数 x为完全平⽅数当且仅当存在⼀个正整数y使得x =y ×y。

输入格式

第一行包含一个正整数n,代表正整数个数。

第二行包含几个正整数a1,a2, .. ,an,代表序列A。

输出格式

输出一个整数,代表满足要求的<l,r > 数量。

样例1

图片

样例解释

满⾜条件的< l, r > 有< 3, 3 > 和< 1 , 5 > 。

数据范围

图片

对于全部数据 ,保证有 1≤n ≤105,1≤ai≤30。

【题目大意】

给定n个数的序列a,求有多少组[l,r]满足(),且a[l]*a[l+1]*a[l+2]*…*a[r]是完全平方数(n ≤ 105, a[i] ≤ 30)

【解题思路】

一段区间积的真实值很显然我们无法求出来,那么就要通过完全平方数的性质进行转化。我们有结论:一个数是完全平方数,当且仅当这个数质因数分解后,所有质因子的指数都为偶数。那么,判定一个数是否为完全平方数,可以等价于判定它的所有素因子的指数是否为偶数。注意到a[i]<=30,那么a[i]中质因子的个数只有2,3,5,7,11,13,17,19,23,29共10个,可以用十位的二进制数进行表示,若a[i]中含有奇数个第x个质因子,则让二进制表示的第x位为1,否则为0。设这个十位二进制数为b[i],则问题转变为找到[l,r]满足b[l]^b[l+1]^b[l+2]^…^b[r]=0,区间的xor和是满足做差的性质的,进一步转化为sum[r]^sum[l-1]=0(sum数组为b数组的xor前缀和),也就是找l和r,满足sum[r]=sum[l-1],这一步可以先统计出sum[i](0<=i<=n)等于某一定值k的数量cnt,根据乘法原理,最终答案为cnt*(cnt-1)/2,而k的取值范围为[0~],可以使用类似桶排的方式统计。

参考程序

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值