欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!
专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。
适合人群:
- 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
- 希望系统学习C++/Python编程的初学者
- 想要提升算法与编程能力的编程爱好者
附上汇总贴:历年蓝桥杯青少组省赛国赛C++中/高级组真题解析 | 汇总
第1题
C++中,bool类型的变量占用字节数为( )。
A.1
B.2
C.3
D.4
【答案】:A
【解析】
bool 类型的值为 true/false,在二进制表示下为1/0,因此看似只需要1位(bit)即可表示。
但实际在计算机中,还需要考虑到字节对齐的规则:计算机的内存空间按照字节(byte)划分,各种类型数据按照一定的规则(以结构体为例:某个变量存放的起始位置,相对于结构体的起始位置的偏移量,是该变量字节数的整数倍)在空间上排列,而不是紧接着按顺序一个一个排放,这样做可以提高CPU的存储和读取速度。
因此,C++ 中 bool 类型与 char 类型一样,都需要1 byte。
一些其他类型的占用字节数: short: 2 byte。 int: 4 byte。 long long: 8 byte。 double: 8 byte。
第2题
以下关于C++结构体的说法,正确的是( )。
A.结构体中只能包含成员变量,不能包含成员函数
B.结构体不能从另一个结构体继承
C.结构体里面可以包含静态成员变量
D.结构体里面不能包含构造函数
【答案】:C
【解析】
本题初步涉及了C++中面向对象程序的知识点,但可以根据自己的程序设计经验分析推出。
A选项错误,结构体中可以定义成员变量,也可以定义只有该结构体类型变量可调用的成员函数。
B选项错误,所谓结构体的继承特性,指的是在一个已经定义好的旧结构体的基础上,创建一个新结构体,并且新结构体可以复用旧结构体的成员和函数。
C选项正确,但结构体静态成员变量的语法规则较为复杂,值得一提。C++中要在结构体内定义静态成员变量,需使用 static 关键字。与普通的成员变量相比,静态成员变量有一些不同,以下几个尤为重要:
静态成员变量不属于某一类型的结构体变量,而属于结构体的类型。
静态成员变量的初始化必须在结构体与函数体以外进行(即全局变量的位置),不能在结构体中刚定义成员变量时就初始化,格式形如:
<数据类型><类名>::<静态数据成员名>=<值>
使用静态成员变量有两大好处。一是节省空间,对于某一结构体类型共用的数据(如:自定义Circle类型,需要共用圆周率),如果定义了这一类型的较长数组,该数据也不会散落在数组中的每个元素中各执一份;二是可以保证该变量的隐藏性与安全性,防止该变量的定义与其他同名变量冲突,且不被混淆修改。
D选项错误,构造函数可以在创建结构体变量时,按照函数预设的构造规则,将对应成员变量赋值,并执行其他操作。构造函数在创建结构体类型的对象时自动执行,因此无法由用户主动调用,也没有返回值。
第3题
设只含根结点的二又树高度为1,共有62个结点的完全二叉树的高度为( )。
A.4
B.5
C.6
D.7
【答案】:C
本题需要二叉树的前置知识。完全二叉树指的是结点从上至下,每层从左至右依次铺开的二叉树。一个含有6个结点的完全二叉树,其形态固定如下所示。
如果完全二叉树的最后一层恰好填满,则称作满二叉树。由等比数列的求和可知:一个高度为h的满二叉树含有2h-1个结点。本题的62个结点,相当于高度为6的满二叉树的 2 6 − 1 2^6-1 26−1 = = = 63 63 63个结点中,再去掉最底层最右端的一个结点。
第4题
以下关于数组的说法,不正确的是( )。
A.数组中所有元素的类型必须都相同
B.数组中各元素在内存中是顺序存放的
C.数组最后一个元素的索引是数组的长度
D.数组名的第一个字符可以是下划线
【答案】:C
【解析】
以 int a[100]; 为例,最后一个元素为 a[99],下标索引 99 为数组长度减1。
第5题
执行以下代码,输出的结果是( )。
#include <iostream>
using namespace std;
int f(int k)
{
if (k == 1)
{
return 3;
}
return 2 * f(k-1) + 1;
}
int main()
{
int n = 6;
cout << f(n);
return 0;
}
A.127
B.97
C.63
D.126
【答案】:A
【解析】
由递归计算规则,有: f(1)=3,f(2)=2x3+1=7,f(3)=2×7+1=15,f(4)=2×15+1=31,f(5)=2×31+1=63,f(6)=2×63+1=127
实际上,对递归式f(n)=2f(n-1)+1,等式两边各自加1,有f(n)+1=2(f(n-1)+1),
可知f(k)+1是首项为4,公比为2的等比数列,同样有f(6)+1=27=128,解得f(6)=127。