欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!
专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。
适合人群:
- 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
- 希望系统学习C++/Python编程的初学者
- 想要提升算法与编程能力的编程爱好者
附上汇总帖:GESP认证C++编程真题解析 | 汇总
单选题
第1题
已知小写字母b的ASCII码为98,下列C++代码的输出结果是( )。
#include<iostream>usingnamespacestd;intmain(){chara='b'+1;cout<<a;return0;}A. b
B. c
C. 98
D. 99
第2题
已知a为int类型变量,p为int *类型变量,下列表达式不符合语法的是( )。
A.a * a
B.p * p
C.a && a
D.p && p
第3题
下列关于C++类的说法,错误的是( )。
A. 如果一个类包含纯虚函数,则它不能包含成员变量。
B. 如果一个类包含纯虚函数,则不能用它定义对象。
C. 派生类对象占用的内存总是不小于基类对象。
D. 派生类可以不实现基类的虚函数。
第4题
已知数组a的定义int a[10] = {-1};,下列说法不正确的是( )。
A. 数组a至少占用10个int大小的内存,一般为40个字节。
B. 数组a的所有元素均被初始化为-1。
C. 语句a[-1] = 0;不会产生编译错误,但会导致难以预测的运行结果。
D. 语句a[13] = 0;不会产生编译错误,但会导致难以预测的运行结果。
第5题
一棵完全二叉树有165个结点,则叶结点有多少个?( )
A. 38
B. 82
C. 83
D. 84
第6题
下列关于二叉树的说法,错误的是( )。
A. 二叉排序树的中序遍历顺序与元素排序的顺序是相同的。
B. 自平衡二叉查找树(AVL树)是一种二叉排序树。
C. 个元素的二叉排序树,其高一定为⌊ l o g 2 n ⌋ \lfloor log_2n\rfloor⌊log2n⌋。
D. 任意的森林,都可以映射为一颗二叉树进行表达和存储。
第7题
下列关于树和图的说法,错误的是( )。
A. 保留树的所有节点,并把树的每个节点指向其父节点,则可以将树转换为一个有向弱连通图。
B. 保留树的所有节点,并把树的每个节点指向其子节点,则可以将树转换为一个有向无环图。
C. 每个连通图都存在生成树。
D. 每个存在生成树的有向图,都一定是强连通的。
第8题
对一个包含V VV个顶点、E EE条边的图,执行广度优先搜索,其最优时间复杂度是( )。
A.O ( V + E ) O(V+E)O(V+E)
B.O ( V ) O(V)O(V)
C.O ( E ) O(E)O(E)
D.O ( V 2 ) O(V^2)O(V2)
第9题
以下哪个方案不能合理解决或缓解哈希表冲突( )。
A. 用新元素覆盖发生冲突的哈希表项。
B. 在每个哈希表项处,使用单链表管理该表项的冲突元素。
C. 建立额外的单链表,用来管理所有发生冲突的元素。
D. 使用不同的哈希函数再建立一个哈希表,用来管理所有发生冲突的元素。
第10题
以下关于贪心法和动态规划的说法中,错误的是( )。
A. 对特定的问题,贪心法不一定适用。
B. 当特定的问题适用贪心法时,通常比动态规划的时间复杂度更低。
C. 对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。
D. 采用动态规划的算法一定具有多项式时间复杂度。
第11题
下面程序的输出为( )。
#include<iostream>usingnamespacestd;intfib(intn){if(n==0)return1;returnfib(n-1)+fib(n-2);}intmain(){cout<<fib(6)<<endl;return0;}A.8
B.13
C.21
D. 无法正常结束。
第12题
下面程序的时间复杂度为( )。
intrec_fib[MAX_N];intfib(intn){if(n<=1)returnn;if(rec_fib[n]!=0)returnrec_fib[n];returnfib(n-1)+fib(n-2);}A.O ( ϕ n ) , ϕ = 5 + 1 2 O(\phi^n),\phi = \frac{\sqrt 5+1}{2}O(ϕn),ϕ=25+1
B.O ( 2 n ) O(2^n)O(2n)
C.O ( n 2 ) O(n^2)O(n2)
D.O ( n ) O(n)O(n)
第13题
下面init_sieve函数的时间复杂度为( )。
intsieve[MAX_N];voidinit_sieve(intn){for(inti=1;i<=n;i++)sieve[i]=i;for(inti=2;i<=n;i++)for(intj=i;j<=n;j+=i)sieve[j]--;}A.O ( n ) O(n)O(n)
B.O ( n l o g l o g n ) O(nloglogn)O(nloglogn)
C.O ( n l o g n ) O(nlogn)O(nlogn)
D.O ( n 2 ) O(n^2)O(n2)
第14题
下面count_triple函数的时间复杂度为( )。
intgcd(intm,intn){if(m==0)returnn;returngcd(n%m,m);}intcount_triple(intn){intcnt=0;for(intv=1;v*v*4<=n;v++)for(intu=v+1;u*(u+v)*2<=n;u+=2)if(gcd(u,v)==1){inta=u*u-v*v;intb=u*v*2;intc=u*u+v*v;cnt+=n/(a+b+c);}returncnt;}A.O ( n 2 ) O(n^2)O(n2)
B.O ( n 2 l o g n ) O(n^2logn)O(n2logn)
C.O ( n l o g n ) O(nlogn)O(nlogn)
D.O ( n ) O(n)O(n)
第15题
下列选项中,哪个不可能是下图的深度优先遍历序列( )。
A. 2, 3, 5, 7, 8, 9, 6, 4, 1
B. 5, 7, 8, 9, 1, 2, 4, 3, 6
C. 6, 8, 9, 5, 7, 1, 2, 3, 4
D. 8, 5, 7, 9, 1, 2, 3, 6, 4
判断题
第1题
C++语言中,表达式9 && 12的结果类型为int、值为8。
第2题
C++语言中,在有int a[10];定义的范围内,通过表达式a[-1]进行访问将导致编译错误。
第3题
选择排序一般是不稳定的。
第4题
C++语言中,float和int类型一般都是4字节,因此float类型能够表达不同的浮点数值的数量,与int类型能够表达不同的整数值的数量是相同的。
第5题
使用math.h或cmath头文件中的对数函数,表达式log(256)的结果类型为double、值约为8.0。
第6题
一棵有N NN个节点的完全二叉树,则树的深度为⌊ l o g 2 ( N ) ⌋ \lfloor log_2(N)\rfloor⌊log2(N)⌋。
第7题
邻接表和邻接矩阵都是图的存储形式。通常,使用邻接表比使用邻接矩阵的时间复杂度更低。
第8题
C++语言中,类的构造函数可以声明为私有(private)。
第9题
泛洪算法的递归实现容易造成溢出,因此大的二维地图算法中,一般使用广度优先搜索实现。
第10题
很多游戏中为玩家设置多种可供学习的技能,要学习特定技能又往往需要先学习1个或以上的前置技能。尽管这样的技能间依赖关系常被玩家称为“技能树”,但它并不一定是树,更可能是有向无环图。
编程题
题解:洛谷 P14077 [GESP202509 七级] 连通图