欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!
专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。
适合人群:
- 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
- 希望系统学习C++/Python编程的初学者
- 想要提升算法与编程能力的编程爱好者
附上汇总贴:历年CSP-J初赛真题解析 | 汇总-优快云博客
1、在内存储器中每个存储单元都被赋予一个唯一的序号,称为( )。
A.地址
B.序号
C.下标
D.编号
【答案】:A
【解析】
数据存储在内存中,使用地址作为序号来查找
2、编译器的主要功能是( A )。
A.将源程序翻译成机器指令代码
B.将源程序重新组合
C.将低级语言翻译成高级语言
D.将一种高级语言翻译成另一种高级语言
【答案】:A
【解析】
编译器的功能就是将高级语言转换为低级机器语言,如汇编语言,选A
3、设x=true,y=true, z=false,以下逻辑运算表达式值为真的是( )。
A.(y∨z)∧x∧z
B.x∧(z∨y)∧z
C.(x∧y)∧z
D.(x∧y)∨(z∨x)
【答案】:D
【解析】
∨表示逻辑或,∧表示逻辑与。A、B、C计算出来都是false,选D
4、现有一张分辨率为2048x1024像素的32位真彩色图像。请问要存储这张图像,需要多大的存储空间?( )。
A.16MB
B.4MB
C.8MB
D.32MB
【答案】:C
【解析】
(2048*1024*32) / (8*1024*1024) = 8,选C
5、冒泡排序算法的伪代码如下:
输入:数组L,n≥1。输出:按非递减顺序排序的L。
算法BubbleSort:
1. FLAG ← n //标记被交换的最后元素位置
2. while FLAG > 1 do
3. k ← FLAG - 1
4. FLAG ← 1
5. for j=1 to k do
6. if L(j) > L(j+1) then do
7. L(j) ↔ L(j+1)
8. FLAG ← j
对n个数用以上冒泡排序算法进行排序,最少需要比较多少次?( )。
A.n²
B.n-2
C.n-1
D.n
【答案】:C
【解析】
第6行出现了比较,要算一共比较了多少次,就要判断双重循环一共执行了多少次。第4行将FLAG改为了1,所以while循环只会执行一次,故比较次数由for循环决定。for循环执行k次,k=n-1,所以选C
6、设A是n个实数的数组,考虑下面的递归算法:
XYZ(A[1..n])
1. if n=1 then return A[1]
2. else temp ← XYZ(A[1..n-1])
3. if temp<A[n]
4. then return temp
5. else return A[n]
请问算法XYZ的输出是什么?( )。
A.A数组的平均
B.A数组的最小值
C.A数组的中值
D.A数组的最大值
【答案】:B
【解析】
第1行n==1时,表示数组中只有1个数,就返回该数。否则就把前n-1的数赋值给temp,然后让temp与n(最后一个数)做比较,第3至5行表示每次比较后返回较小的那个数。所以选B,这个函数就是在求最小值。
7、链表不具有的特点是( )。
A.可随机访问任一元素
B.不必事先估计存储空间
C.插入删除不需要移动元素
D.所需空间与线性表长度成正比
【答案】:A
【解析】
链表不能随机访问任一元素,选A。过去几年都有考过该题,建议机械记忆下来。
8、有10个顶点的无向图至少应该有( )条边才能确保是一个连通图。
A.9
B.10
C.11
D.12
【答案】:A
【解析】
例如3个点,需要2条边将其相连起来。
9、二进制数1011转换成十进制数是( )。
A.11
B.10
C.13
D.12
【答案】:A
【解析】
2^3+2^1+2^0 = 11
10、五个小朋友并排站成一列,其中有两个小朋友是双胞胎,如果要求这两个双胞胎必须相邻,则有( )种不同排列方法?
A.48
B.36
C.24
D.72
【答案】:A
【解析】
双胞胎捆绑在一起看做一个整体。故4个小朋友排列,共4*3*2*1=24,双胞胎小朋友可以有2种排列方式,所以24*2=48。也可以使用插空法,除双胞胎外的3个小朋友有3*2*1=6种,周围4个空就有4种方式,最后双胞胎有2种排列方式,故6*4*2=48。
11、下图中所使用的数据结构是( )。
A.栈
B.队列
C.二叉树
D.哈希表
【答案】:A
【解析】
典型的堆栈压入和弹出示意图
12、独根树的高度为1。具有61个结点的完全二叉树的高度为( D )。
A.7
B.8
C.5
D.6
【答案】:
【解析】
2^(n-1) -1 < 完全二叉树节点个数 < 2^n -1。由此计算出高度为6,选D
13、干支纪年法是中国传统的纪年方法,由10个天干和12个地支组合成60个天干地支。由公历年份可以根据以下公式和表格换算出对应的天干地支。
天干=(公历年份)除以10所得余数
地支=(公历年份)除以12所得余数
例如,今年是2020年,2020除以10余数为0,查表为“庚”;2020除以12,余数为4,查表为“子”,所以今年是庚子年。
请问1949年的天干地支是( )
A.己酉
B.己亥
C.己丑
D.己卯
【答案】:
【解析】
1949 mod 10 = 9,1949 mod 12 = 5。所以为己丑,选C
14、10个三好学生名额分配到7个班级,每个班级至少有一个名额,一共有( )种不同的分配方案。
A.84
B.72
C.56
D.504
【答案】:A
【解析】
使用插板法,有9个空插6块板子,C(9,6) = C(9,3) = (9*8*7) / (3*2*1)
15、有五副不同颜色的手套(共10只手套,每副手套左右手各1只),一次性从中取6只手套,请问恰好能配成两副手套的不同取法有( A )种。
A.120
B.180
C.150
D.30
【答案】:
【解析】
恰好配成两副手套,可以先从5副手套中挑出2副,C(5,2) = 10。剩下第5只有6种挑法,第6只有4种挑法,由于先挑哪只没有要求,所以需要除以2,得6*4/2 = 12。最后10*12=120。