GESP 2025年9月_C++七级试卷
从PDF导入:GESP 2025年9月_C++七级试卷
试卷题目预览
已知小写字母b的ASCII码为98,下列C++代码的输出结果是( )。
#include
using namespace std;
int main() {
char a = 'b' + 1;
cout << a;
return 0;
}
已知a为int类型变量,p为int*类型变量,下列表达式不符合语法的是( )。
下列关于C++类的说法,错误的是( )。
已知数组a的定义int a[10]={-1};,下列说法不正确的是( )。
一棵完全二叉树有165个结点,则叶结点有多少个?( )
下列关于二叉树的说法,错误的是( )。
下列关于树和图的说法,错误的是( )。
对一个包含V个顶点、E条边的图,执行广度优先搜索,其最优时间复杂度是( )。
以下哪个方案不能合理解决或缓解哈希表冲突( )。
以下关于贪心法和动态规划的说法中,错误的是( )。
下面程序的输出为( )。
#include
using namespace std;
int rec_fib[100];
int fib(int n) {
if (n <= 1)
return n;
if (rec_fib[n] != 0)
return rec_fib[n];
rec_fib[n] = fib(n - 1) + fib(n - 2);
return rec_fib[n];
}
int main() {
cout << fib(7) << endl;
return 0;
}
下面程序的时间复杂度为( )。
int rec_fib[MAX_N];
int fib(int n) {
if (n <= 1)
return n;
if (rec_fib[n] != 0)
return rec_fib[n];
return fib(n - 1) + fib(n - 2);
}
下面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]--;
}
下面count_triple函数的时间复杂度为( )。
int gcd(int m, int n) {
if (m == 0) return n;
return gcd(n % m, m);
}
int count_triple(int n) {
int cnt = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (gcd(i, j) == 1) cnt++;
return cnt;
}
下列选项中,哪个不可能是下图的深度优先遍历序列( )。

C++语言中,表达式9&&12的结果类型为int、值为8。
C++语言中,在有int a[10];定义的范围内,通过表达式a[-1]进行访问将导致编译错误。
选择排序一般是不稳定的。
C++语言中,float和int类型一般都是4字节,因此float类型能够表达不同的浮点数值的数量,与int类型能够表达不同的整数值的数量是相同的。
使用math.h或cmath头文件中的对数函数,表达式log(256)的结果类型为double、值约为8.0。
一棵有N个节点的完全二叉树,则树的深度为⌊log₂N⌋+1。
邻接表和邻接矩阵都是图的存储形式。通常,使用邻接表比使用邻接矩阵的时间复杂度更低。
C++语言中,类的构造函数可以声明为私有(private)。
泛洪算法的递归实现容易造成溢出,因此大的二维地图算法中,一般使用广度优先搜索实现。
很多游戏中为玩家设置多种可供学习的技能,要学习特定技能又往往需要先学习1个或以上的前置技能。尽管这样的技能间依赖关系常被玩家称为"技能树",但它并不一定是树,更可能是有向无环图。
连通图
时间限制:1.0s 内存限制:512.0MB
给定一张包含n个结点与m条边的无向图,结点依次以1,2,...,n编号,第i条边(1≤i≤m)连接结点ui与结点vi。
如果从一个结点经过若干条边可以到达另一个结点,则称这两个结点是连通的。
你需要向图中加入若干条边,使得图中任意两个结点都是连通的。请你求出最少需要加入的边的条数。
注意给出的图中可能包含重边与自环。
第一行,两个正整数n,m。接下来m行,每行两个正整数ui,vi,表示一条边。
输出一行,一个整数,表示使得图中任意两个结点连通所需加入的边的最少数量。
【样例输入1】 4 4 1 2 2 3 3 1 1 4 【样例输出1】 0 对于所有测试点,保证1≤n≤10⁵,1≤m≤10⁵。
金币收集
时间限制:1.0s 内存限制:512.0MB
小A正在游玩收集金币的游戏。具体来说,在数轴上将会出现n枚金币,其中第i枚(1≤i≤n)金币将会在时刻ti出现在数轴上坐标为i的位置。
小A必须在时刻ti恰好位于坐标i,才可以获得第i枚金币。
游戏开始时为时刻0,此时小A的坐标为0。
小A每个时刻只能选择保持不动,或是向右移动一个单位。
小A想知道他最多能收集多少枚金币。你能帮他收集最多的金币吗?
第一行,一个正整数n。第二行,n个正整数t₁,t₂,...,tₙ。
输出一行,一个整数,表示最多能收集的金币数量。
【样例输入1】 5 1 3 2 5 4 【样例输出1】 3 对于所有测试点,保证1≤n≤10⁵,1≤ti≤10⁹。