林老师 · 客观题题库 · CSP-S 2022 · 提高级第一轮真题

CSP-S 2022 · 提高级第一轮真题

2022 CCF CSP-S(提高级)第一轮 · 客观题真题 · 满分 100 分
真题
复刻
试卷编号OBJ-846506
题目总数20 题 · 100.0 分
试卷类型客观题
考生须知:
① 本卷为客观题单卷,合计 20 题 · 100.0 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100.0 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

客 观 题

20 QUESTIONS · 2 POINTS EACH
第 1 题 单选 未作答

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

(2 分)
CSP-S 2022 · 单选 第1题 | 知识点 文件与目录、文件类型与扩展名
第 2 题 单选 未作答

你同时用 time 命令和秒表为某个程序在单核 CPU 上的运行计时。假如 time 命令的输出如下:

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

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

(2 分)
CSP-S 2022 · 单选 第2题 | 知识点 文件与目录、Linux与常用命令
第 3 题 单选 未作答

若元素 abcdef 依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次退栈操作,则不可能得到的出栈序列是( )。

(2 分)
CSP-S 2022 · 单选 第3题 | 知识点 栈、栈的应用
第 4 题 单选 未作答

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

(2 分)
CSP-S 2022 · 单选 第4题 | 知识点 顺序查找、排序稳定性
第 5 题 单选 未作答

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

(2 分)
CSP-S 2022 · 单选 第5题 | 知识点 二分答案、计数排序
第 6 题 单选 未作答

计算机系统用小端(Little Endian)和大端(Big Endian)来描述多字节数据的存储地址顺序模式,其中小端表示将低位字节数据存储在低地址的模式、大端表示将高位字节数据存储在低地址的模式。在小端模式的系统和大端模式的系统分别编译和运行以下 C++ 代码段表示的程序,将分别输出什么结果?( )

01unsigned x = 0xDEADBEEF;
02unsigned char *p = (unsigned char *)&x;
03printf("%X", *p);

(2 分)
CSP-S 2022 · 单选 第6题 | 知识点 Unicode与汉字编码、三目运算、位异或
第 7 题 单选 未作答

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

(2 分)
CSP-S 2022 · 单选 第7题 | 知识点 二叉树概念、二叉树性质
第 8 题 单选 未作答

强连通图的性质不包括( )。

(2 分)
CSP-S 2022 · 单选 第8题 | 知识点 邻接矩阵、邻接矩阵
第 9 题 单选 未作答

每个顶点度数均为 22 的无向图称为“22 正规图”。由编号为从 11nn 的顶点构成的所有 22 正规图中,包含欧拉回路的不同 22 正规图的数量为( )。

(2 分)
CSP-S 2022 · 单选 第9题 | 知识点 计数排序、基数排序
第 10 题 单选 未作答

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

(2 分)
CSP-S 2022 · 单选 第10题 | 知识点 排列、插空法
第 11 题 单选 未作答

小明希望选到形如 省A·LLDDD 的车牌号。车牌号在 · 之前的内容固定不变;后面的 55 位号码中,前 22 位必须是大写英文字母,后 33 位必须是阿拉伯数字(LL 代表 AZDD 代表 0099,两个 LL 和三个 DD 之间可能相同也可能不同)。总共有多少个可供选择的车牌号?( )

(2 分)
CSP-S 2022 · 单选 第11题 | 知识点 威尔逊定理、威尔逊定理
第 12 题 单选 未作答

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

(2 分)
CSP-S 2022 · 单选 第12题 | 知识点 堆、埃氏筛
第 13 题 单选 未作答

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

01int i, j, k = 0;
02for (i = 0; i < n; i++) {
03    for (j = 0; j < n; j *= 2) {
04        k = k + n / 2;
05    }
06}

(2 分)
CSP-S 2022 · 单选 第13题 | 知识点 排序稳定性、剪枝、逻辑运算
第 14 题 单选 未作答

以比较为基本运算,在 nn 个数的数组中找最大的数,在最坏情况下至少要做( )次运算。

(2 分)
CSP-S 2022 · 单选 第14题 | 知识点 剪枝、数组越界
第 15 题 单选 未作答

ack 函数在输入参数 (2,2) 时的返回值为( )。

01unsigned ack(unsigned m, unsigned n) {
02    if (m == 0) return n + 1;
03    if (n == 0) return ack(m - 1, 1);
04    return ack(m - 1, ack(m, n - 1));
05}

(2 分)
CSP-S 2022 · 单选 第15题 | 知识点 归并排序、归并排序、归并排序
第 16~21 题 阅读程序 (共 13 分) 未作答

1  #include <iostream>
2  #include <string>
3  #include <vector>
4 
5  using namespace std;
6 
7  int f(const string &s, const string &t)
8  {
9      int n = s.length(), m = t.length();
10 
11      vector<int> shift(128, m + 1);
12 
13      int i, j;
14 
15      for (j = 0; j < m; j++)
16          shift[t[j]] = m - j;
17 
18      for (i = 0; i <= n - m; i += shift[s[i + m]]) {
19          j = 0;
20          while (j < m && s[i + j] == t[j]) j++;
21          if (j == m) return i;
22      }
23 
24      return -1;
25  }
26 
27  int main()
28  {
29      string a, b;
30      cin >> a >> b;
31      cout << f(a, b) << endl;
32      return 0;
33  }

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

16.

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

(1 分)
17.

当输入为 abbababbbab abab 时,输出为 4。( )

(1.5 分)
18.

当输入为 GoodLuckCsp2022 22 时,第 2020 行的 j++ 语句执行次数为 22。( )

(1.5 分)
19.

该算法最坏情况下的时间复杂度为( )。

(3 分)
20.

f(a, b) 与下列( )语句的功能最类似。

(3 分)
21.

当输入为 baaabaaabaaabaaaa aaaa 时,第 2020 行的 j++ 语句执行次数为( )。

(3 分)
CSP-S 2022 · 阅读程序 第16-21题 | 知识点 剪枝、if-else
第 22~27 题 阅读程序 (共 13.5 分) 未作答

1  #include <iostream>
2 
3  using namespace std;
4 
5  const int MAXN = 105;
6 
7  int n, m, k, val[MAXN];
8  int temp[MAXN], cnt[MAXN];
9 
10  void init()
11  {
12      cin >> n >> k;
13      for (int i = 0; i < n; i++) cin >> val[i];
14      int maximum = val[0];
15      for (int i = 1; i < n; i++)
16          if (val[i] > maximum) maximum = val[i];
17      m = 1;
18      while (maximum >= k) {
19          maximum /= k;
20          m++;
21      }
22  }
23 
24  void solve()
25  {
26      int base = 1;
27      for (int i = 0; i < m; i++) {
28          for (int j = 0; j < k; j++) cnt[j] = 0;
29          for (int j = 0; j < n; j++) cnt[val[j] / base % k]++;
30          for (int j = 1; j < k; j++) cnt[j] += cnt[j - 1];
31          for (int j = n - 1; j >= 0; j--) {
32              temp[cnt[val[j] / base % k] - 1] = val[j];
33              cnt[val[j] / base % k]--;
34          }
35          for (int j = 0; j < n; j++) val[j] = temp[j];
36          base *= k;
37      }
38  }
39 
40  int main()
41  {
42      init();
43      solve();
44      for (int i = 0; i < n; i++) cout << val[i] << ' ';
45      cout << endl;
46      return 0;
47  }

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

22.

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

(1.5 分)
23.

该算法的空间复杂度仅与 nn 有关。( )

(1.5 分)
24.

该算法的时间复杂度为 O(m(n+k))O(m(n+k))。( )

(1.5 分)
25.

当输入为 5 3 98 26 91 37 46 时,程序第一次执行到第 3636 行,val[] 数组的内容依次为( )。

(3 分)
26.

val[i] 的最大值为 100100kk 取( )时算法运算次数最少。

(3 分)
27.

当输入的 kkval[i] 的最大值还大时,该算法退化为( )算法。

(3 分)
CSP-S 2022 · 阅读程序 第22-27题 | 知识点 二分答案、滑动窗口
第 28~33 题 阅读程序 (共 13.5 分) 未作答

1  #include <iostream>
2  #include <algorithm>
3 
4  using namespace std;
5 
6  const int MAXL = 1000;
7 
8  int n, k, ans[MAXL];
9 
10  int main(void)
11  {
12      cin >> n >> k;
13      if (!n) cout << 0 << endl;
14      else
15      {
16          int m = 0;
17          while (n)
18          {
19              ans[m++] = (n % (-k) + k) % k;
20              n = (ans[m - 1] - n) / k;
21          }
22          for (int i = m - 1; i >= 0; i--)
23              cout << char(ans[i] >= 10 ?
24          ans[i] + 'A' - 10 :
25          ans[i] + '0');
26          cout << endl;
27      }
28      return 0;
29  }

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

28.

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

(1.5 分)
29.

删除第 2323 行的强制类型转换,程序的行为不变。( )

(1.5 分)
30.

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

(1.5 分)
31.

当输入为 100 7 时,输出为( )。

(3 分)
32.

当输入为 -255 8 时,输出为( )。

(3 分)
33.

当输入为 1000000 19 时,输出为( )。

(3 分)
CSP-S 2022 · 阅读程序 第28-33题 | 知识点 二进制、埃氏筛、字符型
第 34~38 题 完善程序 (共 15 分) 未作答

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

试补全程序。

1  #include <bits/stdc++.h>
2  using namespace std;
3 
4  int solve(int *a1, int *a2, int n, int k) {
5      int left1 = 0, right1 = n - 1;
6      int left2 = 0, right2 = n - 1;
7      while (left1 <= right1 && left2 <= right2) {
8          int m1 = (left1 + right1) >> 1;
9          int m2 = (left2 + right2) >> 1;
10          int cnt = ①;
11          if (②) {
12              if (cnt < k) left1 = m1 + 1;
13              else right2 = m2 - 1;
14          } else {
15              if (cnt < k) left2 = m2 + 1;
16              else right1 = m1 - 1;
17          }
18      }
19      if (③) {
20          if (left1 == 0) {
21              return a2[k - 1];
22          } else {
23              int x = a1[left1 - 1], ④;
24              return std::max(x, y);
25          }
26      } else {
27          if (left2 == 0) {
28              return a1[k - 1];
29          } else {
30              int x = a2[left2 - 1], ⑤;
31              return std::max(x, y);
32          }
33      }
34  }

34.

①处应填( )。

(3 分)
35.

②处应填( )。

(3 分)
36.

③处应填( )。

(3 分)
37.

④处应填( )。

(3 分)
38.

⑤处应填( )。

(3 分)
CSP-S 2022 · 完善程序 第34-38题 | 知识点 剪枝
第 39~43 题 完善程序 (共 15 分) 未作答

(容器分水)有两个容器,容器 11 的容量为 aa 升,容器 22 的容量为 bb 升;同时允许下列三种操作:

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

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

试补全程序。

1  #include <bits/stdc++.h>
2  using namespace std;
3  const int N = 110;
4 
5  int f[N][N];
6  int ans;
7  int a, b, c;
8  int init;
9 
10  int dfs(int x, int y) {
11      if (f[x][y] != init)
12          return f[x][y];
13      if (x == c || y == c)
14          return f[x][y] = 0;
15      f[x][y] = init - 1;
16      f[x][y] = min(f[x][y], dfs(a, y) + 1);
17      f[x][y] = min(f[x][y], dfs(x, b) + 1);
18      f[x][y] = min(f[x][y], dfs(0, y) + 1);
19      f[x][y] = min(f[x][y], dfs(x, 0) + 1);
20      int t = min(a - x, y);
21      f[x][y] = min(f[x][y], ①);
22      t = min(x, b - y);
23      f[x][y] = min(f[x][y], ②);
24      return f[x][y];
25  }
26 
27  void go(int x, int y) {
28      if (③)
29          return;
30      if (f[x][y] == dfs(a, y) + 1) {
31          cout << "FILL(1)" << endl;
32          go(a, y);
33      } else if (f[x][y] == dfs(x, b) + 1) {
34          cout << "FILL(2)" << endl;
35          go(x, b);
36      } else if (f[x][y] == dfs(0, y) + 1) {
37          cout << "DROP(1)" << endl;
38          go(0, y);
39      } else if (f[x][y] == dfs(x, 0) + 1) {
40          cout << "DROP(2)" << endl;
41          go(x, 0);
42      } else {
43          int t = min(a - x, y);
44          if (f[x][y] == ④) {
45              cout << "POUR(2,1)" << endl;
46              go(x + t, y - t);
47          } else {
48              t = min(x, b - y);
49              if (f[x][y] == ⑤) {
50                  cout << "POUR(1,2)" << endl;
51                  go(x - t, y + t);
52              } else
53              assert(0);
54          }
55      }
56  }
57 
58  int main() {
59      cin >> a >> b >> c;
60      ans = 1 << 30;
61      memset(f, 127, sizeof f);
62      init = **f;
63      if ((ans = dfs(0, 0)) == init - 1)
64          cout << "impossible";
65      else {
66          cout << ans << endl;
67          go(0, 0);
68      }
69  }

39.

①处应填( )。

(3 分)
40.

②处应填( )。

(3 分)
41.

③处应填( )。

(3 分)
42.

④处应填( )。

(3 分)
43.

⑤处应填( )。

(3 分)
CSP-S 2022 · 完善程序 第39-43题 | 知识点 桶排序、冒泡排序