2024年12月 GESP C++ 7级
2024年12月 GESP C++ 7级认证考试真题(含编程操作题部分)
// questions
题目预览
已知小写字母 bbb 的 ASCII 码为 989898,下列 C++ 代码的输出结果是( )。
#include <iostream>
using namespace std;
int main() {
char a = 'b';
cout << a + 1;
return 0;
}
bbb
ccc
989898
999999
已知 aaa 为 int 类型变量,ppp 为 int * 类型变量,下列赋值语句不符合语法的是( )。
+a = *p;
*p = +a;
a = *(p + a);
*(p + a) = a;
已知数组 aaa 的定义 int a[10] = {0}; ,下列说法不正确的是( )。
语句 a[-1] = 0; 会产生编译错误。
数组 aaa 的所有元素均被初始化为 000 。
数组 aaa 至少占用 101010 个 int 大小的内存,一般为 404040 个字节。
语句 a[13] = 0; 不会产生编译错误,但会导致难以预测的运行结果。
下列关于 C++ 类的说法,错误的是( )。
构造函数不能声明为虚函数,但析构函数可以。
函数参数如声明为类的引用类型,调用时不会调用该类的复制构造函数。
静态方法属于类、不属于对象,因此不能使用 对象.方法(...) 的形式调用静态方法。
析构派生类的对象时,一定会调用基类的析构函数。
下列关于有向图的说法,错误的是( )。
nnn 个顶点的弱连通有向图,最少有 n−1n-1n−1 条边。
nnn 个顶点的强连通有向图,最少有 nnn 条边。
nnn 个顶点的有向图,最多有 n(n−1)n(n-1)n(n−1) 条边。
nnn 个顶点的有向完全图,有 n(n−1)n(n-1)n(n−1) 条边。
一棵二叉树的每个结点均满足:结点的左子树和右子树,要么同时存在,要么同时不存在。该树有 197197197 个结点,则其叶结点有多少个?( )
989898
999999
不存在这样的树。
无法确定叶结点数量。
下列关于二叉树的说法,错误的是( )。
二叉排序树的中序遍历顺序与元素排序的顺序是相同的。
nnn 个元素的二叉排序树,其高一定为 log2n\log_2 nlog2n。
自平衡二叉查找树(AVL 树)是一种二叉排序树。
任意的森林,都可以映射为一棵二叉树进行表达和存储。
一个简单无向图有 101010 个结点、666 条边。在最差情况,至少增加多少条边可以使其连通?( )
333
444
666
999
一个哈希表,包括 nnn 个位置(分别编号 0∼(n−1)0 \sim (n-1)0∼(n−1)),每个位置最多仅能存储一个元素。该哈希表只有插入元素和查询两种操作,没有删除或修改元素的操作。以下说法错误的是( )。
如果哈希函数取值范围为 0∼(n−1)0 \sim (n-1)0∼(n−1),且当发生哈希函数碰撞时循环向后寻找空位,则查询操作的最差时间复杂度为 O(n)O(n)O(n)。(“循环向后”指:000 向后一位为 111,111 向后一位为 222,……,(n−2)(n-2)(n−2) 向后一位为 (n−1)(n-1)(n−1),(n−1)(n-1)(n−1) 向后一位为 000)
如果哈希函数取值范围为 0∼(n−1)0 \sim (n-1)0∼(n−1),且当发生哈希函数碰撞时仅循环向后一个位置寻找空位,则查询操作的最差时间复杂度为 O(n)O(n)O(n)。
如果哈希函数取值范围为 0∼(m−1)0 \sim (m-1)0∼(m−1)(m<nm < nm<n),且当发生哈希函数碰撞时仅在 m∼(n−1)m \sim (n-1)m∼(n−1) 的范围内寻找空位,则查询操作的最差时间复杂度为 O(n)O(n)O(n)。
查询操作时,如果发现查询元素经哈希函数对应的位置为空位,该查询元素仍可能出现在哈希表内。
以下关于动态规划的说法中,错误的是( )。
动态规划方法将原问题分解为一个或多个相似的子问题。
动态规划方法通常能够列出递推公式。
动态规划方法有递推和递归两种实现形式。
递推实现动态规划方法的时间复杂度总是不低于递归实现。
下面程序的输出为( )。
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << (int)exp(2) << endl;
return 0;
}
444
777
100100100
无法通过编译。
下面程序的输出为( )。
#include <iostream>
#define N 10
using namespace std;
int h[N];
int main() {
h[0] = h[1] = 1;
for (int n = 2; n < N; n++)
for (int j = 0; j < n; j++)
h[n] += h[j] * h[n - j - 1];
cout << h[6] << endl;
return 0;
}
132132132
143014301430
167961679616796
结果是随机的。
上题中程序的时间复杂度为( )。
下面 init_sieve 函数的时间复杂度为( )。
int sieve[MAX_N];
void init_sieve(int n) {
for (int i = 1; i <= n; i++)
sieve[i] = i;
for (int i = 2; i <= n; i++)
for (int j = i; j <= n; j += i)
sieve[j]--;
}
无法正常结束。
下列选项中,哪个不可能是下图的深度优先遍历序列( )。
111, 222, 333, 555, 777, 888, 666, 999, 444
111, 444, 777, 888, 999, 555, 222, 333, 666
111, 555, 777, 888, 999, 444, 222, 333, 666
111, 222, 333, 666, 999, 888, 555, 777, 444
表达式 5 ^ 3 的结果为 125125125。
在 C++ 语言中,函数定义和函数调用可以不在同一个文件内。
在 nnn 个元素中进行二分查找,平均时间复杂度是 O(logn)O(\log n)O(logn),但须要事先进行排序。
unsigned long long 类型是 C++ 语⾔中表达范围最大的非负整数类型之一,其表达范围是 。超出该范围的非负整数运算,将无法使用 C++ 语⾔进行计算。
使用 math.h 或 cmath 头文件中的函数,表达式 log2(32) 的结果为 555 、类型为 int。
C++ 是一种面向对象编程语言,C 则不是。继承是面向对象三大特性之一。因此,使用 C 语言无法实现继承。
邻接表和邻接矩阵都是图的存储形式。邻接表在遍历单个顶点的所有边时,时间复杂度更低;邻接矩阵在判断两个顶点之间是否有边时,时间复杂度更低。
MD5 是一种常见的哈希函数,可以由任意长度的数据生成 128128128 位的哈希值,曾广泛应用于数据完整性校验。 中国科学家的系列工作首次发现了可实用的 MD5 破解方法。之后,MD5 逐渐被其他哈希函数所取代。
递归调用在运行时会由于层数过多导致程序崩溃,可以通过循环配合栈缓解这一问题。
一个图中,每个顶点表达一个城市,连接两个顶点的边表达从一个城市到达另一个城市的一种交通方式。这个图可以用来表达交通网络,且是简单有向图。
试题名称:武器购买
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
商店里有 nnn 个武器,第 iii 个武器的强度为 pip_ipi,花费为 cic_ici。
小杨想要购买一些武器,满足这些武器的总强度不小于 PPP,总花费不超过 QQQ,小杨想知道是否存在满足条件的购买方案,如果有,最少花费又是多少。
输入格式
第一行包含一个正整数 ttt,代表测试数据组数。
对于每组测试数据,第一行包含三个正整数 n,P,Qn,P,Qn,P,Q,含义如题面所示。
之后 nnn 行,每行包含两个正整数 pi,cip_i,c_ipi,ci,代表武器的强度和花费。
输出格式
对于每组测试数据,如果存在满足条件的购买方案,输出最少花费,否则输出 -1。
样例输入 #1
3
3 2 3
1 2
1 2
2 3
3 3 4
1 2
1 2
2 3
3 1000 1000
1 2
1 2
2 3
样例输出 #1
3
-1
-1
说明/提示
| 子任务编号 | 数据点占比 | nnn | pip_ipi | cic_ici | PPP | QQQ |
|---|---|---|---|---|---|---|
| 111 | 20%20\%20% | ≤10\leq 10≤10 | 111 | 111 | ≤10\leq 10≤10 | ≤10\leq 10≤10 |
| 222 | 20%20\%20% | ≤100\leq 100≤100 | ≤5×104\leq 5\times 10^4≤5×104 | 111 | ≤5×104\leq 5\times 10^4≤5×104 | 222 |
| 333 | 60%60\%60% | ≤100\leq 100≤100 | ≤5×104\leq 5\times 10^4≤5×104 | ≤5×104\leq 5\times 10^4≤5×104 | ≤5×104\leq 5\times 10^4≤5×104 | ≤5×104\leq 5\times 10^4≤5×104 |
对于全部数据,保证有 1≤t≤101\leq t\leq 101≤t≤10,1≤n≤1001\leq n\leq 1001≤n≤100,1≤pi,ci,P,Q≤5×1041\leq p_i,c_i,P,Q\leq 5\times 10^41≤pi,ci,P,Q≤5×104。
试题名称:燃烧
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
小杨有一棵包含 nnn 个节点的树,其中节点的编号从 111 到 nnn。节点 iii 的权值为 aia_iai。
小杨可以选择一个初始节点引燃,每个燃烧的节点会将其相邻节点中权值严格小于自身权值的在节点间扩散直到不会有新的节点被引燃。
小杨想知道在合理选择初始节点的情况下,最多可以燃烧多少个节点。
输入格式
第一行包含一个正整数 nnn,表示节点数量。
第二行包含 nnn 个正整数 a1,a2,…,ana_1,a_2,\dots,a_na1,a2,…,an,代表节点权值。
之后 n−1n-1n−1 行,每行包含两个正整数 ui,viu_i,v_iui,vi,代表存在一条连接节点 uiu_iui 和 viv_ivi 的边。
输出格式
输出一个正整数,代表最多燃烧的节点个数。
样例输入 #1
5
6 2 3 4 5
1 2
2 3
2 5
1 4
样例输出 #1
3
说明/提示
| 子任务编号 | 数据点占比 | nnn |
|---|---|---|
| 111 | 20%20\%20% | ≤10\leq 10≤10 |
| 222 | 20%20\%20% | ≤100\leq 100≤100 |
| 333 | 60%60\%60% | ≤105\leq 10^5≤105 |
对于全部数据,保证有 1≤n≤1051\leq n\leq 10^51≤n≤105,1≤ai≤1061\leq a_i\leq 10^61≤ai≤106。