#4467. 2021 CSP-J1 入门级第一轮答案解析

2021 CSP-J1 入门级第一轮答案解析

单项选择

1.D

答案解析

C语言是面向过程的编译性语言。

2.B

答案解析

图灵奖是计算机领域的国际最高奖项。

3.A

答案解析

计算机中以二进制方式进存储数据。

4.C

答案解析

以第一个数作为初始值,从第二个数开始比较,最坏情况下需要到序列末尾才能得到最大值,即比较N-1。

5.D

答案解析

D选项中c和d出栈后,从栈顶到栈底至少有b,a,其中b还没有出栈,a无法先出栈。

6.D

答案解析

n个节点的树有n-1条边,则需要留下n-1条边,即需要删除m-(n-1)条边。

7.C

答案解析

其他进制转为十进制:按权展开求和。

  • 整数部分:1221*2^{2}+0210*2^{1}+1201*2^{0} = 5,
  • 小数部分:1211*2^{-1}+1221*2^{-2} = 0.75,
  • 结果为5.75。

8.A

答案解析

完全二叉树第5层最多有24=162^{4}=16个节点,那么从左到右依次可以有连续k(1≤k≤16)个节点,一共有16种情况。

9.B

10.B

答案解析

  • 第一组有C62C_{6}^{2},第二组有C42C_{4}^{2},第三组有C22C_{2}^{2}
  • 以上相加为90,但是没有区分组别,所以还需要除以A33=6A_{3}^{3} = 6,最终有15种。

11.B

答案解析

哈夫曼编码每次把频率最低的两个节点(字符)合并产生新的节点,将新的节点放到集合中,删除用来合并的两个节点,重复上述过程直到剩下一个节点为止.每次选择频率最小的两个节点就是贪心的思想.

12.A

答案解析

  • 以1,1开头的三位数有2种;
  • 以1,2开头的三位数有3种;
  • 以1,3开头的三位数有2种;
  • 以2,1开头的三位数有3种;
  • 以2,2开头的三位数有2种;
  • 以2,3开头的三位数有2种;
  • 以3开头的三位数有4种;
  • 一共有2+3+2+3+2+2+4=18种。

13.C

答案解析

  • solve(7) = 7 * solve(7 - 2)
  • solve(5) = 5 * solve(5 - 2)
  • solve(3) = 3 * solve(3 - 1)
  • solve(2) = 2 * solve(2 - 1)
  • solve(1) = 1 那么solve(7)=75321 = 210。

14.B

答案解析

从a向b的方向开始搜索的终点是e (a-b-d-c-e),从a向c的方向开始搜索的终点是b(a-c-e-d-b)或c(a-c-d-b-e),则最多有两个终点分为b和c。

15.B

答案解析

1和2从A到B,1从B到A,此时A点有1、4、8,B点有2,所用时间为2+1=3;4和8从A到B,2从B到A,此时A点有1、2,B点有4、8,所用时间为8+2=10;1和2从A到B,所用时间为2;总时间为3+10+2=15。

阅读程序

16.B

答案解析

数组 int a[1000]没有1001个位置

17.B

答案解析

a[i]为负数也行,“去掉最低位的1”的操作对负数也有效,最终仍会去掉所有1,得到0。

18.B

答案解析

应为3 4 3 17 4,10=……1010,f(10)+g(10)=2+2=4。

19.A

答案解析

511998=……1111100111111111110,f(511998)+g(511998)=16+2=18

20.B

答案解析

主函数前g不声明不定义,无法在主函数种使用。

21.B

答案解析

  • -65536=111111111111111100ooooooooo0o0oo,f(-65536)+g(-65536)=16+65536=65552
  • 2147483647=01111111111111111111111111111111,f(2147483647)+g(2147483647)=31+1=32

22.B

答案解析

没有消息表明输入会保证这一点

23.A

答案解析

例如"a0=="和"a1=="均输出"k"。

24.A

答案解析

table[o]=Oxff=(11111111)2,按int解释为-1。

25.B

答案解析

函数包含对字符串中字符的遍历,每个字符常数次操作,故复杂度为o(字符串长度)。

26.B

答案解析

可以按table数组的下标、值对应关系模拟,但需要记忆ASCII码。更合适的方法是最后两个字符相差-2,故选B,这样不需要记忆记忆ASCII码。

27.C

答案解析

同可以记忆ASCII码模拟。更合适的方法是排除法,确定位数为8且最后两个字符不同,故选c。

28.A

答案解析

发现21行k的取值不会是1,那么14行包含的所有的下标都不会是1,后续计算不会受影响。

29.B

答案解析

f[i]=(1+num_1)(1+num_2) …… (1+num_m),所以f[i]一定包含c[i* k]= c[i]+1 = num_1 +1,能够整除。

30.B

答案解析

举个例子即可,g[8]=1+2+4+8,g[9]=1+3+9。

31.A

答案解析

线性筛全家桶套餐,整体也是线性的。

32.C

答案解析

含有2个约数就是质数,数质数即可。

33.C

答案解析

直到数组的概念后,直接算得结果。

34.D

答案解析

需要搞明白c的含义,c是表示出圈的人数,那么如果c没有到n-1,即剩下一个人,就继续循环。

35.C

答案解析

需要搞明白p的含义,F[i] =1;明显提示是出圈的情况,那么我们要知道p什么时候出圈,这里明显p需要在01之间反复横跳,且最开始p为o,那么应该是p为1时出圈。

36.C

答案解析

出圈后自然想到的是出圈人数的更新。

37.D

答案解析

每次找到没有出圈的人我们必定干什么?肯定是更新报数状态,这里可能有同学会将其与3搞混。

38.B

答案解析

循环里面出圈这个操作已经有了,那么自然会想到还剩下一个必要操作是移动考虑的位置,这里注意到是一个环,需要考虑出界问题。

39.B

答案解析

排序的规则函数,如果搞清楚步骤4的操作,那么知道我们的排序需要能二分出特定坐标,与x,y有关。

40.D

答案解析

排序后去重的基本操作,即使看选项应该也很好理解。

41.C

答案解析

二分查找的基本框架代码。

42.B

答案解析

因为排序固定了,那么根据二分查找原理,我们知道p比A[mid]大时才会更新左边界,这里貌似两个选项都可以。

43.D

答案解析

这里大多数跟坐标有关系,我们可以思考,如果去掉条件会出现什么问题,不难发现一个矩形会被重复算四次(四种对角情况),于是这个条件的目的是防止重复,D能保证一个是左下角一个是右上角。