#CSPS2022. 2022 CCF 非专业级别软件能力认证第一轮(CSP-S1)提高级 C++ 语言试题

2022 CCF 非专业级别软件能力认证第一轮(CSP-S1)提高级 C++ 语言试题

一、单项选择题(共 15 题,每题 2 分,共计 30 分)

  1. 在 Linux 系统终端中,用于切换工作目录的命令为( )。

{{ select(1) }}

  • ls
  • cd
  • cp
  • all
  1. 你同时用 time 命令和秒表为某个程序在单核 CPU 的运行计时。假如 time 命令的输出如下:

    real    0m30.721s
    user    0m24.579s
    sys     0m6.123s
    

    以下最接近秒表计时的时长为( )。

{{ select(2) }}

  • 30s30\text{s}
  • 24s24\text{s}
  • 18s18\text{s}
  • 6s6\text{s}
  1. 若元素 abcdef 依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次退栈操作,则不可能得到的出栈序列是( )。

{{ select(3) }}

  • dcebfa
  • cbdaef
  • bcaefd
  • afedcb
  1. 考虑对 nn 个数进行排序,以下最坏时间复杂度低于 O(n2)O(n^2) 的排序方法是( )。

{{ select(4) }}

  • 插入排序
  • 冒泡排序
  • 归并排序
  • 快速排序
  1. 假设在基数排序过程中,受宇宙射线的影响,某项数据异变为一个完全不同的值。请问排序算法结束后,可能出现的最坏情况是( )。

{{ select(5) }}

  • 移除受影响的数据后,最终序列是有序序列
  • 移除受影响的数据后,最终序列是前后两个有序的子序列
  • 移除受影响的数据后,最终序列是一个有序的子序列和一个基本无序的子序列
  • 移除受影响的数据后,最终序列基本无序
  1. 计算机系统用小端(Little Endian)和大端(Big Endian)来描述多字节数据的存储地址顺序模式,其中小端表示将低位字节数据存储在低地址的模式、大端表示将高位字节数据存储在低地址的模式。在小端模式的系统和大端模式的系统分别编译和运行以下 C++ 代码段表示的程序,将分别输出什么结果?( )

{{ select(6) }}

  • EFEF
  • EFDE
  • DEEF
  • DEDE
  1. 一个深度为 55(根结点深度为 11)的完全 33 叉树,按前序遍历的顺序给结点从 11 开始编号,则第 100100 号结点的父结点是第( )号。

{{ select(7) }}

  • 9595
  • 9696
  • 9797
  • 9898
  1. 强连通图的性质不包括( )。

{{ select(8) }}

  • 每个顶点的度数至少为 11
  • 任意两个顶点之间都有边相连
  • 任意两个顶点之间都有路径相连
  • 每个顶点至少都连有一条边
  1. 每个顶点度数均为 22 的无向图称为“22 正规图”。由编号为从 11nn 的顶点构成的所有 22 正规图,其中包含欧拉回路的不同 22 正规图的数量为( )。

{{ select(9) }}

  • n!n!
  • (n1)!(n-1)!
  • n!/2n!/2
  • (n1)!/2(n-1)!/2
  1. 共有 88 人选修了程序设计课程,期末大作业要求由 22 人组成的团队完成。假设不区分每个团队内 22 人的角色和作用,请问共有多少种可能的组队方案。( )

{{ select(10) }}

  • 2828
  • 3232
  • 5656
  • 6464
  1. 小明希望选到形如“省 A·$\mathcal{L}\mathcal{L}\mathcal{D}\mathcal{D}\mathcal{D}$”的车牌号。车牌号在“·”之前的内容固定不变;后面的 55 位号码中,前 22 位必须是大写英文字母,后 33 位必须是阿拉伯数字(L\mathcal{L} 代表 A 至 Z,D\mathcal{D} 表示 0099,两个 L\mathcal{L} 和三个 D\mathcal{D} 之间可能相同也可能不同)。请问总共有多少个可供选择的车牌号。( )

{{ select(11) }}

  • 2028020280
  • 5200052000
  • 676000676000
  • 17576001757600
  1. 给定地址区间为 090\sim 9 的哈希表,哈希函数为 h(x)=xmod10h(x)=x\bmod 10,采用线性探查的冲突解决策略(对于出现冲突情况,会往后探查第一个空的地址存储;若地址 99 冲突了则从地址 00 重新开始探查)。哈希表初始为空,依次存储 (71,23,73,99,44,79,89)(71,23,73,99,44,79,89) 后,请问 8989 存储在哈希表哪个地址中。( )

{{ select(12) }}

  • 99
  • 00
  • 11
  • 22
  1. 对于给定的 nn,分析以下代码段对应的时间复杂度,其中最为准确的时间复杂度为( )。

{{ select(13) }}

  • O(n)O(n)
  • O(nlogn)O(n\log n)
  • O(nn)O(n\sqrt n)
  • O(n2)O(n^2)
  1. 以比较为基本运算,在 nn 个数的数组中找最大的数,在最坏情况下至少要做( )次运算。

{{ select(14) }}

  • n/2n/2
  • n1n-1
  • nn
  • n+1n+1
  1. ack 函数在输入参数“(2,2)(2,2)”时的返回值为( )。

{{ select(15) }}

  • 55
  • 77
  • 99
  • 1313

二、阅读程序(除特殊说明外,判断题每题 1.5 分,选择题每题 3 分,共计 40 分)

第 1 题

假设输入字符串由 ASCII 可见字符组成,完成下面的判断题和单选题:

  1. (1 分)当输入为 abcde fg 时,输出为 1-1。( )

{{ select(16) }}

  • 正确
  • 错误
  1. 当输入为 abbababbbab abab 时,输出为 44。( )

{{ select(17) }}

  • 正确
  • 错误
  1. 当输入为 GoodLuckCsp2022 22 时,第 20 行的 j++ 语句执行次数为 22。( )

{{ select(18) }}

  • 正确
  • 错误
  1. 该算法最坏情况下的时间复杂度为( )。

{{ select(19) }}

  • O(n+m)O(n+m)
  • O(nlogm)O(n\log m)
  • O(mlogn)O(m\log n)
  • O(nm)O(nm)
  1. f(a, b) 与下列( )语句的功能最类似。

{{ select(20) }}

  • a.find(b)
  • a.rfind(b)
  • a.substr(b)
  • a.compare(b)
  1. 当输入为 baaabaaabaaabaaaa aaaa 时,第 20 行的 j++ 语句执行次数为( )。

{{ select(21) }}

  • 99
  • 1010
  • 1111
  • 1212

第 2 题

假设输入的 nn 为不大于 100100 的正整数,kk 为不小于 22 且不大于 100100 的正整数,val[i]int 表示范围内,完成下面的判断题和单选题:

  1. 这是一个不稳定的排序算法。( )

{{ select(22) }}

  • 正确
  • 错误
  1. 该算法的空间复杂度仅与 nn 有关。( )

{{ select(23) }}

  • 正确
  • 错误
  1. 该算法的时间复杂度为 O(m(n+k))O(m(n+k))。( )

{{ select(24) }}

  • 正确
  • 错误
  1. 当输入为 5 3 98 26 91 37 46 时,程序第一次执行到第 36 行,val[] 数组的内容依次为( )。

{{ select(25) }}

  • 91 26 46 37 98
  • 91 46 37 26 98
  • 98 26 46 91 37
  • 91 37 46 98 26
  1. val[i] 的最大值为 100100kk 取( )时算法运算次数最少。

{{ select(26) }}

  • 22
  • 33
  • 1010
  • 不确定
  1. 当输入的 kkval[i] 的最大值还大时,该算法退化为( )算法。

{{ select(27) }}

  • 选择排序
  • 冒泡排序
  • 计数排序
  • 桶排序

第 3 题

假设输入的 nnint 范围内,kk 为不小于 22 且不大于 3636 的正整数,完成下面的判断题和单选题:

  1. 该算法的时间复杂度为 O(logkn)O(\log_k n)。( )

{{ select(28) }}

  • 正确
  • 错误
  1. 删除第 23 行的强制类型转换,程序的行为不变。( )

{{ select(29) }}

  • 正确
  • 错误
  1. 除非输入的 nn00,否则程序输出的字符数为 O(logkn+1)O(\lfloor\log_k |n|\rfloor+1)。( )

{{ select(30) }}

  • 正确
  • 错误
  1. 当输入为 100 7 时,输出为( )。

{{ select(31) }}

  • 202
  • 1515
  • 244
  • 1754
  1. 当输入为 -255 8 时,输出为( )。

{{ select(32) }}

  • 1400
  • 1401
  • 417
  • 400
  1. 当输入为 1000000 19 时,输出为( )。

{{ select(33) }}

  • BG939
  • 87G1B
  • 1CD428
  • 7CF1B

三、完善程序(共 10 题,每题 3 分,共计 30 分)

第一题:归并第 kk

已知两个长度均为 nn 的有序数组 a1a2(均为递增序,但不保证严格单调递增),并且给定正整数 kk1k2n1\le k\le 2n),求数组 a1a2 归并排序后的数组里第 kk 小的数值。

试补全程序。

  1. ① 处应填( )。

{{ select(34) }}

  • (m1 + m2) * 2
  • (m1 - 1) + (m2 - 1)
  • m1 + m2
  • (m1 + 1) + (m2 + 1)
  1. ② 处应填( )。

{{ select(35) }}

  • a1[m1] == a2[m2]
  • a1[m1] <= a2[m2]
  • a1[m1] >= a2[m2]
  • a1[m1] != a2[m2]
  1. ③ 处应填( )。

{{ select(36) }}

  • left1 == right1
  • left1 < right1
  • left1 > right1
  • left1 != right1
  1. ④ 处应填( )。

{{ select(37) }}

  • y = a1[k - left2 - 1]
  • y = a1[k - left2]
  • y = a2[k - left1 - 1]
  • y = a2[k - left1]
  1. ⑤ 处应填( )。

{{ select(38) }}

  • y = a1[k - left2 - 1]
  • y = a1[k - left2]
  • y = a2[k - left1 - 1]
  • y = a2[k - left1]

第二题:容器分水

有两个容器,容器 1 的容量为 aa 升,容器 2 的容量为 bb 升;同时允许下列三种操作:

  1. FILL(i):用水龙头将容器 iii{1,2}i\in\{1,2\})灌满水;
  2. DROP(i):将容器 ii 的水倒进下水道;
  3. POUR(i,j):将容器 ii 的水倒进容器 jj(完成此操作后,要么容器 jj 被灌满,要么容器 ii 被清空)。

求只使用上述两个容器和三种操作,获得恰好 cc 升水的最少操作数和操作序列。aabbcc 均为不超过 100100 的正整数,且 cmax{a,b}c\le\max\{a,b\}

程序读入三个正整数 a,b,ca,b,c。若无法获得恰好 cc 升水,输出 impossible;否则先输出最少操作数,再逐行输出操作序列。

试补全程序。

  1. ① 处应填( )。

{{ select(39) }}

  • dfs(x + t, y - t) + 1
  • dfs(x + t, y - t) - 1
  • dfs(x - t, y + t) + 1
  • dfs(x - t, y + t) - 1
  1. ② 处应填( )。

{{ select(40) }}

  • dfs(x + t, y - t) + 1
  • dfs(x + t, y - t) - 1
  • dfs(x - t, y + t) + 1
  • dfs(x - t, y + t) - 1
  1. ③ 处应填( )。

{{ select(41) }}

  • x == c || y == c
  • x == c && y == c
  • x >= c || y >= c
  • x >= c && y >= c
  1. ④ 处应填( )。

{{ select(42) }}

  • dfs(x + t, y - t) + 1
  • dfs(x + t, y - t) - 1
  • dfs(x - t, y + t) + 1
  • dfs(x - t, y + t) - 1
  1. ⑤ 处应填( )。

{{ select(43) }}

  • dfs(x + t, y - t) + 1
  • dfs(x + t, y - t) - 1
  • dfs(x - t, y + t) + 1
  • dfs(x - t, y + t) - 1