欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!
专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。
适合人群:
- 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
- 希望系统学习C++/Python编程的初学者
- 想要提升算法与编程能力的编程爱好者
第1题
NOI Linux系统中,用于调出文件夹内所有文件的命令是( )
A.cd
B.ls
C.find
D.pwd
【答案】:B
【解析】
A选项是进入目录,B选项是查看文件夹内所有文件,C选项为查找文件,D选项为确认当前目录
第2题
三进制下的整数 ( 1010201 ) 3 (1010201)_3 (1010201)3和 ( − 212102 ) 3 (-212102)_3 (−212102)3注意这是负数,两者的和在三进制下等于多少?( )
A. ( 21022 ) 3 (21022)_3 (21022)3
B. ( 121022 ) 3 (121022)_3 (121022)3
C. ( 2000010 ) 3 (2000010)_3 (2000010)3
D. ( 101102 ) 3 (101102)_3 (101102)3
【答案】:A
【解析】
( 1010201 ) 3 (1010201)_3 (1010201)3转为十进制是829, ( − 212102 ) 3 (-212102)_3 (−212102)3转为十进制是-632,两者之和为197,再转为三进制 ( 21022 ) 3 (21022)_3 (21022)3
第3题
表达式的中缀形式是(a+b*c)/(d+e)
,请问其后缀形式是( )。
A./*+abc+de
B./+a*bc+de
C.ab+c*de+/
D.abc*+de+/
【答案】:D
【解析】
使用二叉树的形式来记录中缀形式,再采用后序遍历的方法来遍历二叉树,得到结果为D
第4题
令根结点的高度为1,则一棵含有2024个结点的二叉树的高度至多为( )。
A.10
B.11
C.12
D.2024
【答案】:D
【解析】
最大的高度即2024个结点为一条链
第5题
对于长度为5的排列P, 有多少个满足:存在1<=k<=3 使 P 1 < P 2 < ⋯ < P k > P k + 1 > ⋯ > P 5 P_1\lt P_2\lt \dots \lt P_k\gt P_{k+1}\gt \dots \gt P_5 P1<P2<⋯<Pk>Pk+1>⋯>P5( )。
A.10
B.11
C.16
D.120
【答案】:B
【解析】
k为1时有1种。k=2时有4种, P 2 P_2 P2 是 5, P 1 P_1 P1 从剩下的4个数中选1个, P 3 , P 4 , P 5 P_3,P_4,P_5 P3,P4,P5 三个数严格递减,只有一个选择。k=3时有6种, P 1 , P 2 P_1,P_2 P1,P2 从剩下的 4 4 4 个数中选 2 2 2 个, P 4 , P 5 P_4,P_5 P4,P5 两个数严格递减,只有一个选择。
第6题
字符a,b,c,d,e,f在文本中出现的频率为5%,13%,45%,9%,16%,12%。为其用01进行哈夫曼编码,合理的是:
A.1111,100,0,1110,110,101
B.1010,011,00,1001,010,1000
C.000,011,11,011,10,010
D.10101,111,01,1011,00,110
【答案】:A
【解析】
将字符按频率从小到大排序,d: 9%
, a: 5%
, f: 12%
, b: 13%
, e: 16%
, c: 45%
。每次合并频率最小的两个结点,直到只剩一个根结点。得到abcdef的编码为1111,100,0,1110,110,101
第7题
从线段上随机挑选两个点,其距离不小于线段长度一半的概率为?( )
A.1/3
B.2/3
C.1/4
D.1/2
【答案】:D
【解析】
设两个点为x和y,计算|x−y|≥0.5 的概率。
将 x 和 y 看作平面上的点,所有可能的点 (x,y) 落在单位正方形 [0,1]×[0,1] 内。满足 |x−y|≥0.5 的区域是正方形中位于两条直线 y=x+0.5 和 y=x−0.5 之外的部分。
单位正方形的总面积为 1,因此概率为满足条件的面积除以总面积:
P ( ∣ x − y ∣ ≥ 0.5 ) = 0.5 1 = 1 2 P(|x−y|≥0.5)=\frac{0.5}{1}=\frac{1}{2} P(∣x−y∣≥0.5)=10.5=21
第8题
从男女数量相同的8个人中随机选取三个人做大作业。则选出的3个人不都是同性的概率为( )。
A.1/7
B.6/7
C.25/28
D.2/7
【答案】:B
【解析】
3个人不是同性的概率就是排除“3人全是男性”和“3人全是女性” 的情况。8人中选3人的总组合数为56,“3人都是男性”、"3人都是女性“的总选法为8,所以答案是56-8=48,概率为48/56=6/7
第9题
下列有关排序的说法不正确的是( )。
A. 桶排序是一种有效的排序方式,时间复杂度为O(n+V)
B. 堆排序是一种有效的排序方式,是一种稳定排序
C.mutiset 是一种有效的数据结构,可以用来排序,但是常数很大
D. 归并排序的最劣复杂度为 O(nlogn)
【答案】:B
【解析】
堆排序不稳定
第10题
已知运算优先级: ¬ > ∩ > ∪ \lnot \gt \cap\gt \cup ¬>∩>∪。下列表达式的值与取值为0,1的变量x y z 有关的是( )。
A. ( x ∪ y ) ∩ ( ¬ x ∪ ¬ y ) (x\cup y) \cap (\lnot \ x \cup \lnot \ y) (x∪y)∩(¬ x∪¬ y)
B. ¬ x ∪ ¬ y ∪ ( x ∩ y ) \lnot \ x\cup \lnot \ y\cup (x\cap y) ¬ x∪¬ y∪(x∩y)
C. ¬ y ∩ ( ( x ∪ z ) ∩ y ∪ z ) \lnot \ y \cap ((x\cup z)\cap y\cup z) ¬ y∩((x∪z)∩y∪z)
D. ( x ∩ y ) ∪ ( y ∩ ¬ z ) ∪ ( ¬ z ∩ x ) (x\cap y)\cup (y\cap \lnot \ z)\cup(\lnot \ z\cap x) (x∩y)∪(y∩¬ z)∪(¬ z∩x)
【答案】:D
【解析】
x y z | A | B | C | D |
---|---|---|---|---|
0 0 0 | 0 | 1 | 0 | 0 |
0 0 1 | 0 | 1 | 1 | 0 |
0 1 0 | 1 | 1 | 0 | 1 |
0 1 1 | 1 | 1 | 0 | 0 |
1 0 0 | 1 | 1 | 0 | 1 |
1 0 1 | 1 | 1 | 1 | 0 |
1 1 0 | 0 | 1 | 0 | 1 |
1 1 1 | 0 | 1 | 0 | 1 |
A、B选项,与z无关,不符合题意。
C选项,与x无关,不符合题意。
第11题
以下代码片段中,若x,y,z>0, 且函数执行过程中变量的值不会超过类型范围,则代码可简写为( )。
void func(int x, int &y, int z) {
x+=y;
while (--z) x=x*2;
y+=x;
}
A.y+=(x+y)<<(z-1)
B.y=(x+y)<<z-a
C.x=((x+y)>>(z+1)+x
D.y=((y+x)<<z)+y
【答案】:A
【解析】
(x + y)
对应 x += y
;<< (z - 1)
对应 x * 2^(z - 1)
;y += ...
对应 y += x
。
第12题
给出一棵节点乱序编号的有7个节点的满二叉树的中序遍历结果:7,1,3,5,2,6,4。下列说法错误的是( )。
A. 若单节点的深度为1,则该二叉树重新定根后最大深度最大为5。
B. 节点1,2的最近公共祖先为节点5
C. 节点2的兄弟是节点4,父亲是节点6
D. 节点2是某个节点的右儿子
【答案】:D
【解析】
推断树的结构可能为:
5
/ \
1 6
/ \ / \
7 3 2 4
根据图,B、C选项正确,D选项错误,2是左儿子。A选项,以7为根后最大深度为5。
第13题
维护一个双向链表,其中 next 是直系后缀, prev 是直系前驱。下列语句中删除元素x的方式正确的是( )。
A.x.prev.next=x.next,x.next.prev=x.prev
B.x.next=x.prev.next,x.prev=x.next.prev
C.x.prev.next=x.next.prev=x
D.x.prev.next=x.prev,x.next.prev=x.next
【答案】:A
【解析】
B选项修改的是 x
自身的 next
和 prev
指针,而不是其前驱和后继节点的指针。
C选项链表结构被破坏,x
的前驱和后继节点都指向 x
,形成环。
D选项链表结构被破坏,x
的前驱和后继节点都自环。
第14题
阅读以下关于正则表达式的段落:
#正则表达式
此处我们考虑一个正则表达式由英文小写字母和特殊字符?,+表示。特殊字符只会在小写字母的后面出
现。
若 *
?
*跟在一个字母后面,则这个字母可以删去或保留。如ca?b
可以变成cab
或cb
。若
*
跟在一个字母后面,则这个字母可以删去或保留或复制多遍。如ca*b
可以变成cab
,**cb
, *caaaaaaab
*等等。若
+
跟在一个字母后面,则这个字母保留或复制多遍,但不能删除。如ca+b
可以变成cab
,**caaaaaaab
等等,但不能变成cb
。综合举例
da*b?c+
可以变成daaacc
,dabc
,dcc
,dabecc
等,不能变成dabbc
,daab
,dacb
,aaacc
等。对于正则表达式s 和标准串t,我们定义匹配程度
f(s,t)
为,s可以变成t中的多少个本质不同的非空子串。即实质相同但位置不同的子串算作相同。
根据以上材料,求 f(a+a?b*aa?b+,aaabbaabbb)
。
A.12
B.13
C.14
D.15
【答案】:C
【解析】
筛选出能由 s
生成的子串。经过验证,有效的子串有:
a
(从a+
或a?
生成)。aa
(a+
=aa
,a?
=, `b*` =
,a
=, `a?` =
,b+
=aaa
(a+
=aaa
, 其余部分为空)。aab
(a+
=aa
,a?
=, `b*` = `b`, `a` =
,a?
= ``,b+
=aaab
(a+
=aaa
,a?
=, `b*` =
,a
=, `a?` =
,b+
=b
)。aabb
(a+
=aa
,a?
=, `b*` = `b`, `a` =
,a?
= ``,b+
=b
)。aaabb
(a+
=aa
,a?
=a
,b*
=b
,a
=, `a?` =
,b+
=b
)。ab
(a+
=a
,a?
=, `b*` =
,a
=, `a?` =
,b+
=b
)。abb
(a+
=a
,a?
=, `b*` = `b`, `a` =
,a?
= ``,b+
=b
)。abbb
(a+
=a
,a?
=, `b*` = `bb`, `a` =
,a?
= ``,b+
=b
)。b
(从b*
或b+
生成)。bb
(从b*
或b+
生成)。bbb
(从b*
或b+
生成)。aabbb
(a+
=aa
,a?
=, `b*` = `b`, `a` =
,a?
= ``,b+
=bb
)。
第15题
HTTP协议是( )层协议?
A.数据链路层
B.网络层
C.传输层
D.应用层
【答案】:D