2022年CSP-J1真题解析

 

基本输⼊输出是⾯向过程的标志,类和对象是⾯向对象语⾔的特性,⾯向对象
三⼤特征是封装、继承和多态。 所以选
AA选项,按照6⼊栈、5⼊栈、5出栈、4⼊栈、4出栈、3⼊栈、3出栈、6
出栈、2⼊栈、1⼊栈、1出栈、1出栈的顺序即可完成;
B选项按照6⼊栈、5⼊栈、4⼊栈、4出栈、5出栈、3⼊栈、3出栈、2⼊
栈、1⼊栈、1出栈、2出栈、6出栈的顺序完成即可;
C选项要让3第⼀个出栈,那么必须6,5,4,3都先⼊栈,那么6⼀定是
要在5之后出栈的,错误;
D选项6-2⼊栈,然后2出栈,3出栈,4出栈,1⼊栈,1出栈,5出栈,6
出栈即可。  

所以选C。

 

 

                                 p和q都是int类型指针,p指向x变量的地址,q指向y变量的
                                 地址,*p存储x的值,*q存储y的值, 最后p指向q, 即y的地址。

                                                                        所以选D。

                                 链表是使⽤不连续的内存空间存储数据,可以动态申请内存,数组申请大小后就固定了,只能在有限的空间中存储,如果想扩⼤存储的话就得重新申请。所以选C。

 模拟⼀下整个过程,根据栈的后进先出特征和队列的先进先出特征,
其实这道题完全可以忽略队列,把出队列的顺序当作出栈顺序即可。
由图我们可以清楚看到栈最多有3个元素。

所以选C。

 

 表达式最后的运算符是 + ,所以 + 是树根节
点,前缀表达式以 + 开头。
也可以把表达式树建起来看。

所以选B。

 我们对几个字⺟根据出现
频率进行哈夫曼编码,如
图所示,选B,d(00)。所以选
B。

 

9号位置的⽗亲在9/2=4号位置,4号位置的⼉
⼦在4*2=8, 4*2+1=9两个位置,右⼦结点位
置在9*2+1=19。 

所以选C。

有向连通图,形成⼀个环,任意两个结点之间
都可到达,有N条边。

所以选B。 

A选项深度优先使⽤递归实现,递归的数据结构其实就是栈;
B是栈的队列特点的描述;
C选项队列常⽤于⼴度优先搜索;
D选项可以⽤两个栈实现队列,⼀个输⼊栈,⼀个输出栈。 

所以选D。

 D为链表中插⼊元素的基本代码逻辑,如
图所示:

所以选D。 

 

不稳定:选快希堆
各种排序算法的复杂度,
稳定性如下:

 所以选B。

3 ∗ 8^1 + 2 ∗ 8^0 + 1 ∗ 8^(-1) = 26.125 

所以选C。

总的情况 1+5+4+3+2+1=16 种,排除 “a” 重复1个, “b” 重复1
个, “ab” 重复1个,剩下13种。
abcde这种5个字符子串有16个,如下:
⻓度为0:空串
⻓度为1:a,b,c,d,e
⻓度为2:ab,bc,cd,de
⻓度为3:abc,bcd,dce
⻓度为4:abcd,bcde
⻓度为5:abcde 

所以选B。

 递归的最大特点就是自己调⽤⾃自己,注意边界条件退出,递归是⾯向功能和逻辑。

所以选B。

 

代码分析: 本题是⼀道位运算的练习题⽬,可以先将所有数据转为⼆进制,然后进⾏位运算操作,最后转成⼗进制输出。
拓展知识: ⽆符号短整数类型(unsigned short),按位与(&),按位或(|),左移运算符(<<),另外注意运算符的优先级(<<)⾼于(|),
⼗六进制是以(0x)开头。 

16.,因为0x55,⽆符号最⾼位为0,不影响运算结果。

17.×,因为char存储字符,当将short改为char时,如果输⼊的是两位数,则x和
y分别存储的是第⼀个字符和第⼆个字符,⽐如输⼊“21”,则读取
的x为’2’,y为’1’。

18.×,因为举个反例,当输⼊“2 2”时,输出的结果为12。

19.×,因为输⼊“2 2”时,输出的结果为12。

20.×

21.B,因为代⼊运算即可,运算结果为“209”。

 

 

 代码分析: 可以⾃⼰在稿纸上模拟⼀下f函数和g函数,会发现两者
的计算结果其实是⼀致的,不过f函数是通过递归实现的,g函数
通过for循环实现。因此我们在做题过程中可以只调⽤g函数或者f
函数来计算最终的答案,看哪个简便就调⽤哪个。
拓展知识: numeric_limits<int>是⽤来取得int类型的最⼤值,需
要包含头⽂件limits。

22. ×,因为通过代⼊输⼊,模拟整个过程其实只执⾏了448次,当然也可以通过递推式奇偶性判断。

23.,因为两个函数作⽤相同,当然输出结果也是⼀致的。

24.,因为直接代⼊求解,当m=1时,运算的结果是n。

25.C,因为将每次循环的执⾏次数加起来。

26.C,因为当m=2时,列举出n为1-20的计算结果为1个1,2个2,3个3,4个4,5个5,5个6,因此结果是6。

27.B,因为当m=100时,n的变化规律为1个1,2个2,4个3,8个4,16个5,32个6,最后剩下37个7,因此结果是7。

 

 代码分析:本题solve1函数使⽤⼆分法求算数平⽅根,solve2函数⽤⽜顿迭代法求解算数平⽅根。

28.,因为⼆分法时间复杂度为logn,⽜顿迭代法时间复杂度为k,solve1执⾏
完成后将结果作为solve2的参数,所以总体时间复杂度为O(log+k)。

29.,因为9801 = 99 × 99。

30.×,因为如果这个 的算数平⽅根是⽆理数,则 ans*ans!=n,这个时候输出0。

 31.×,因为因为题⽬上说n不超过47000,所以 mid 最⼤为47000/2=23500,
23500^2=552250000,不会超出 int 最⼤值0x3FFFFFFF。

32.C,因为直接带⼊验证即可,solve1函数的结果为1,solve2函数运算结果为1.5。

33.B,sqrt(3) 约= 1.732,当迭代次数越多,精度就越⾼,求解的值也就越准确。

34.A,因为256 = 16 × 16,输出的第⼀个数等于16。

 

代码分析: 本程序先是从小到
大,输出小于算数平方根的
因数,再特判算数平方方根,
最后输出⼤于算数平⽅根的
因数。

拓展知识: vector.reserve(a),
增加了vector的容量,但是
size并没有改变,还是要通
过push_back()方法加⼊元素。 

 35.A,因为判断如果 i 是 n 的⼀个因数,就将其加⼊到数组fac中。

36.B,因为对于小于平方根的因数,按顺序输出即可。

37.C,因为判断这个数是不是完全平⽅数。

38.D,因为如果这个数是完全平方数,则输出对应的算数平⽅根 i。

39.A,因为从小到大输出大于算数平⽅根的因数,因此需要倒序
枚举,输出fac[k]的对应另⼀个因数n/fac[k],fac[k]
越⼤,n/fac[k] 越小。

 

 

分析:本题是⼀道⾮常经典的
BFS算法题⽬,使⽤队列实现。
其中flood_fill函数的参数依次为
存储图像的⼆维数组image,起
始位置cur,给定的颜⾊
new_color。对每个点进⾏判断,
如果符合要求就⼊队求解。

40.A,因为判断image[r][c]是不是之前的旧颜
⾊prev_color,是的话就要更新。

41.B,因为将起点颜⾊变更,
mage[cur.r][cur.c]设置为新颜⾊。

42.C,因为通过其它⽅向的判定条件,可以看出少了点(pt.r+1, pt.c)。

43.D,因为将当前位置的颜⾊进⾏更新。

44.A,因为如果当前p点满⾜条件,就要将p
点⼊队,继续判断p点的周围。
 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值