CCF编程能力等级认证GESP—C++7级—20240629

CCF编程能力等级认证GESP---C++7级---20240629

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

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

cpp 复制代码
#include <iostream>
#include <cmath>
using namespace std;
int main() {
    cout << sin(3.1415926 / 2);
    return 0;
}
cpp 复制代码
A. 0
B. 1
C. 0.5
D. 0.7071

正确答案:B

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

cpp 复制代码
A. 先序遍历是 132 。
B. 中序遍历是 123 。
C. 后序遍历是 312 。
D. 先序遍历和后序遍历正好是相反的。

正确答案:D

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

cpp 复制代码
A. {3,5,7,8,1} 
B. {3,4,5,7,8} 
C. {5,7,8}
D. {3,5,7,9,1}

正确答案:A

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

cpp 复制代码
A. {2,5,6,8,9} 是它的最长上升子序列
B. {1,5,6,8,9} 是它的最长上升子序列
C. {7,5,4,3} 是它的最长下降子序列
D. {1,5,6,8,9} 是它的唯一最长上升子序列

正确答案:D

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

cpp 复制代码
A. 二叉树是也是一种图。
B. 二叉树的前序遍历和后序遍历都是深度优先搜索的一种。 
C. 深度优先搜索可以从任意根节点开始。
D. 二叉树的后序遍历也是广度优先搜索的一种。

正确答案:D

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

cpp 复制代码
A. HDEBFIGCA不是它的后序遍历序列 
B. ABCDEFGHI是它的广度优先遍历序列 
C. ABDHECFGI是它的深度优先遍历序列 
D. ABDHECFGI是它的先序遍历序列

正确答案:A

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

cpp 复制代码
A. 丢弃发生冲突的新元素。
B. 在每个哈希表项处,使用不同的哈希函数再建立一个哈希表,管理该表项的冲突元素。 
C. 在每个哈希表项处,建立二叉排序树,管理该表项的冲突元素。
D. 使用不同的哈希函数建立额外的哈希表,用来管理所有发生冲突的元素。

正确答案:A

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

cpp 复制代码
A. 2 & 3的结果是true
B. 011 & 111 的结果是 3
C. 3 & 6的结果是2
D. 110 & 101 的结果是 4

正确答案:C

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

cpp 复制代码
A. 在无向图中,环是指至少包含三个不同顶点,并且第一个顶点和最后一个顶点是相同的路径。 
B. 在有向图中,环是指一个顶点经过至少另一个顶点到自身的路径。
C. 在有向图中,如果任意两个顶点之间都存在一条边,则这个图一定是强连通图。
D. 在有向图中,所有顶点的入度和出度的总和就是图的边数的两倍。```
>正确答案:D



__10、图的存储和遍历算法,下面说法错误的是( )。__
```cpp
A. 图的深度优先搜索和广度优先搜索对有向图和无向图都适用。 
B. 图的深度优先搜索和二叉树的先序遍历道理是不一样的。
C. 图的深度优先搜索需要借助栈来完成。
D. 邻接表中,顶点vi对应链表中的边结点数目正好是顶点vi的度。

正确答案:B

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

A.

B.

C.

D.

正确答案:C

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

A.

B.

C.

D.

正确答案:A

13、下面程序的输出为( )。

cpp 复制代码
#include <iostream>
using namespace std;
int fib(int n){
    if (n <= 1)
        return n;
    return fib(n - 1) + fib(n - 2);
}
int main(){
    cout << fib(6) << endl;
    return 0;
}
cpp 复制代码
A. 5
B. 8
C. 13
D. 无法正常结束。

正确答案:B

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

cpp 复制代码
int count_triple(int n) {
    int cnt = 0;
    for (int a = 1; a <= n; a++)
        for (int b = a; a + b <= n; b++) {
            int c = sqrt(a * a + b * b); 
            if(a + b + c > n)
                break; 
            if(a * a + b * b == c * c)
                cnt++; 
        }
    return cnt; 
}

A. O ( n ) O(n) O(n)

B. O ( n 2 ) O(n^2) O(n2)

C. O ( n 3 ) O(n^3) O(n3)

D. O ( n 4 ) O(n^4) O(n4)
正确答案:B

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

cpp 复制代码
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

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

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

正确答案:错误

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

正确答案:正确

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

正确答案:错误

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

正确答案:正确

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

正确答案:错误

6、一颗 N 层的二叉树,至少有 2 N − 1 2^{N-1} 2N−1个节点。

正确答案:错误

7、非连通图不能使用广度优先搜索算法进行遍历。

正确答案:错误

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

正确答案:正确

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

正确答案:正确

10、泛洪算法的递归方法容易造成溢出,因此大的二维地图算法中,一般不用递归方法。

正确答案:正确

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

黑白翻转

【问题描述】

小杨有一棵包含n个节点的树,这棵树上的任意一个节点要么是白色,要么是黑色。小杨认为一棵树是美丽树当且

仅当在删除所有白色节点之后,剩余节点仍然组成一棵树。

小杨每次操作可以选择一个白色节点将它的颜色变为黑色,他想知道自己最少要执行多少次操作可以使得这棵树变

为美丽树。
【输入描述】

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

第二行包含n个非负整数 a 1 , a 2 , . . . , a n a_1, a_2,...,a_n a1,a2,...,an,其中如果 a i = 0 a_i = 0 ai=0,则节点i的颜色为白色,否则为黑色。

之后n - 1行,每行包含两个正整数 x i , y i x_i, y_i xi,yi,代表存在一条连接节点 x i x_i xi和 y i y_i yi的边。
【输出描述】

输出一个整数,代表最少执行的操作次数。
【样例输入 1】

5

0 1 0 1 0

1 2

1 3

3 4

3 5
【样例输出 1】

2
【样例解释】

将节点1和3变为黑色即可使这棵树变为美丽树,此时删除白色节点5,剩余黑色节点仍然组成一棵树。
【数据范围】

子任务编号 数据点占比 n a i a_i ai 特殊条件
1 30% < = 1 0 5 <= 10^5 <=105 0 < = a i < = 1 0 <= a_i <= 1 0<=ai<=1 树的形态为一条链
2 30% < = 1 0 5 <= 10^5 <=105 0 < = a i < = 1 0 <= a_i <= 1 0<=ai<=1 只有两个节点颜色为黑色
3 40% < = 1 0 5 <= 10^5 <=105 0 < = a i < = 1 0 <= a_i <= 1 0<=ai<=1

对于全部数据,保证有 1 < = n < = 1 0 5 , 0 < = a i < = 1 1 <= n <= 10^5, 0 <= a_i <= 1 1<=n<=105,0<=ai<=1。

区间乘积

【问题描述】

小杨有一个包含 个正整数的序列 A = [ a 1 , a 2 , . . . , a n ] A = [a_1, a_2, ..., a_n] A=[a1,a2,...,an]。

小杨想知道有多少对 < l , r > ( 1 < = l < = r < = n ) <l, r> (1 <= l <= r <= n) <l,r>(1<=l<=r<=n)满足 a l ∗ a l + 1 ∗ . . . ∗ a r a_l * a_{l + 1} * ... *a_r al∗al+1∗...∗ar为完全平方数。

一个正整数x为完全平方数当且仅当存在一个正整数y使得x = y * y。
【输入描述】

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

第二行包含n个正整数 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an, 代表序列A。
【输出描述】

输出一个整数,代表满足要求的 < l , r > <l,r> <l,r>数量.
【样例输入 1】

5

3 2 4 3 2
【样例输出 1】

2
【样例解释】

满足条件的 < l , r > <l,r> <l,r>有 < 3 , 3 > <3,3> <3,3>和 < 1 , 5 > <1,5> <1,5>
【数据范围】

子任务编号 数据点占比 n a i a_i ai
1 20% < = 1 0 5 <= 10^5 <=105 1 < = a i < = 2 1 <= a_i <= 2 1<=ai<=2
2 40% < = 100 <= 100 <=100 1 < = a i < = 30 1 <= a_i <= 30 1<=ai<=30
3 40% < = 1 0 5 <= 10^5 <=105 1 < = a i < = 30 1 <= a_i <= 30 1<=ai<=30

对于全部数据,保证有 1 < = n < = 1 0 5 , 0 < = a i < = 30 1 <= n <= 10^5, 0 <= a_i <= 30 1<=n<=105,0<=ai<=30。

相关推荐
Qter_Sean18 分钟前
自己动手写Qt Creator插件
开发语言·qt
何曾参静谧22 分钟前
「QT」文件类 之 QIODevice 输入输出设备类
开发语言·qt
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
冰芒猓4 小时前
SpringMVC数据校验、数据格式化处理、国际化设置
开发语言·maven
失落的香蕉4 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言
红中马喽4 小时前
JS学习日记(webAPI—DOM)
开发语言·前端·javascript·笔记·vscode·学习
杜杜的man5 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
java小吕布5 小时前
Java中Properties的使用详解
java·开发语言·后端
versatile_zpc6 小时前
C++初阶:类和对象(上)
开发语言·c++