学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年CSP-J初赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客
1、以下不属于面向对象程序设计语言的是( )。
A.C++
B.Python
C.Java
D.C
【答案】:D
【解析】
C语言面向过程,不面向对象
2、以下奖项与计算机领域最相关的是( )。
A.奥斯卡奖
B.图灵奖
C.诺贝尔奖
D.普利策奖
【答案】:B
【解析】
奥斯卡奖是电影界的,普利策奖是摄影方面的
3、目前主流的计算机储存数据最终都是转换成( )数据进行储存。
A.二进制
B.十进制
C.八进制
D.十六进制
【答案】:A
【解析】
主流计算机都是将数据转换为二进制进行存储的,因为二进制最容易实现,利用高低电平就可以体现0和1。ENIAC是十进制计算机
4、以比较作为基本运算,在N个数中找出最大数,最坏情况下所需要的最少的比较次数为( )。
A.N^2
B.N
C.N-1
D.N+1
【答案】:C
【解析】
最坏的情况需要进行相邻比较,如1与2、1与3、1与4...、1与n,即N-1次
5、对于入栈顺序为a,b,c,d,e的序列,下列( )不是合法的出栈序列。
A.a,b,c,d,e
B.e,d,c,b,a
C.b,a,c,d,e
D.c,d,a,e,b
【答案】:D
【解析】
A是合法的,如进入栈后就出来
B是合法的,就是5个元素全部入栈后再依次出来
C是合法的,可以模拟出来
D是非法的,a出不来,因为此时栈顶为b
出栈序列中的每个数的序号后面的序号比它小的数,是按递减排列的(可将a/b/c/d/e转为1/2/3/4/5后检查)
6、对于有n个顶点、m条边的无向连通图(m>n),需要删掉( )条边才能使其成为一棵树。
A.n-1
B.m-n
C.m-n-1
D.m-n+1
【答案】:D
【解析】
n个节点的树有n-1条边,所以需要删除m-(n-1)条边,选D
7、二进制数101.11对应的十进制数是( )。
A.6.5
B.5.5
C.5.75
D.5.25
【答案】:C
【解析】
1*2^2+1*2^0+1*2^-1+1*2^-2 = 5.75
8、如果一棵二叉树只有根结点,那么这棵二叉树高度为1。请问高度为5的完全二叉树有( )种不同的形态?
A.16
B.15
C.17
D.32
【答案】:A
【解析】
去掉满二叉树右下角的节点后的树就是完全二叉树,即若给所有节点编号,完全二叉树中逐层遍历的所有节点的编号是连续的。高度为5时,第5层可以有16个叶子节点,可以删除0-15个叶子节点,共16种形态
9、表达式a*(b+c)*d的后缀表达式为( ),其中“*”和“+”是运算符。
A.**a+bcd
B.abc+*d*
C.abc+d**
D.*a*+bcd
【答案】:B
【解析】
中缀表达式转为后缀表达式,可以使用
1.加括号:a*(b+c)*d --> ((a*(b+c))*d)
2.将运算符移到每对运算式的右边:((a(bc)+)*d)*
3.去括号:abc+*d*
10、6个人,两个人组一队,总共组成三队,不区分队伍的编号。不同的组队情况有( )种。
A.10
B.15
C.30
D.20
【答案】:B
【解析】
第一队,从6人中挑2人,C(6,2) = 6*5/2 = 15
第二队,从4人中挑2人,C(4,2) = 4*3/2 = 6
第三队,从2人中挑2人,C(2,2) = 2*1/2 = 1
如果15*6*1 = 90,则是有顺序的挑法,所以需要去掉3支队伍的不同排列数A(3,3),所以90 / A(3,3) = 15
11、在数据压缩编码中的哈夫曼编码方法,在本质上是一种( )的策略。
A.枚举
B.贪心
C.递归
D.动态规划
【答案】:B
【解析】
哈夫曼编码本质上是哈夫曼树的一个应用。哈夫曼树构造就是给定N个带权值的叶子节点,构造出一个带权路径长度最小的二叉树。如果想要带权路径长度最小,我们应该将权值越小的节点放在越底层,因为这些节点路径长度比较长,权值小点,这样计算出来的带权路径长度就较小。这个其实就是基于贪心的策略。
12、由1,1,2,2,3这五个数字组成不同的三位数有( )种。
A.18
B.15
C.12
D.24
【答案】:A
【解析】
假设三位数是abc,按照如下计算,共18种不同的数字
a=1
b=1 c=2/3 2种;
b=2 c=1/2/3 3种;
b=3 c=1/2 2种;
a=2
b=1 c=1/2/3 3种;
b=2 c=1/3 2种;
b=3 c=1/2 2种;
a=3
b=1 c=1/2 2种;
b=2 c=1/2 2种;
13、考虑如下递归算法
solve(n)
if n<=1 return 1
else if n>=5 return n*solve(n-2)
else return n*solve(n-1)
则调用solve(7) 得到的返回结果为( )。
A.105
B.840
C.210
D.420
【答案】:C
【解析】
列出递推矩阵,得到结果为210,选C
i 0 1 2 3 4 5 6 7
f(i) 1 1 2*f(1)=2 3*f(2)=6 4*f(3)=24 5*f(3)=30 6*f(4)=144 7*f(5)=210
14、以a为起点,对右边的无向图进行深度优先遍历,则b、c、d、e四个点中有可能作为最后一个遍历到的点的个数为( )。
A.1
B.2
C.3
D.4
【答案】:B
【解析】
列出所有深度优先遍历的结果:
abdce
acdbe
acedb
所以作为最后一个遍历到的点的个数有2个,分别是b和e
15、有四个人要从A点坐一条船过河到B点,船一开始在A点。该船一次最多可坐两个人。已知这四个人中每个人独自坐船的过河时间分别为1,2,4,8,且两个人坐船的过河时间为两人独自过河时间的较大者。则最短( )时间可以让四个人都过河到B点(包括从B点把船开回A点的时间)
A.14
B.15
C.16
D.17
【答案】:B
【解析】
使用贪心策略,第一条就是希望过河时间最长的人少来回,过去后就不要再回来了。第二条就是希望把船开回来的人的时间尽可能短。画个模拟图
1&2&4&8 A --------- B
4&8 A ---1&2---> B
4&8 A <---1---- B 2
1 A ---4&8---> B 2
1 A <---2---- B 4&8
A ---1&2---> B 4&8
最短的时间=2+1+8+2+2=15