林老师 · 客观题题库 · CSP-J 2025 · 入门级第一轮真题

CSP-J 2025 · 入门级第一轮真题

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

判 分 报 告

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

客 观 题

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

一个 3232 位无符号整数可以表示的最大值,最接近下列哪个选项?( )

(2 分)
CSP-J 2025 · 单选 第1题 | 知识点 存储单位换算、整型
第 2 题 单选 未作答

在 C++ 中,执行 int x = 255; cout << (x & (x - 1)); 后,输出的结果是?( )

(2 分)
CSP-J 2025 · 单选 第2题 | 知识点 泛洪算法、泛洪算法
第 3 题 单选 未作答

函数 calc(n) 的定义如下,则 calc(5) 的返回值是多少?( )

1  int calc(int n) {
2      if (n <= 1) return 1;
3      if (n % 2 == 0) return calc(n / 2) + 1;
4      else return calc(n - 1) + calc(n - 2);
5  }

(2 分)
CSP-J 2025 · 单选 第3题 | 知识点 归并排序、归并排序
第 4 题 单选 未作答

55 个权值 10,12,15,20,2510, 12, 15, 20, 25 构造哈夫曼树,该树的带权路径长度是多少?( )

(2 分)
CSP-J 2025 · 单选 第4题 | 知识点 回溯、回溯
第 5 题 单选 未作答

在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和,这个总和等于?( )

(2 分)
CSP-J 2025 · 单选 第5题 | 知识点 邻接矩阵、邻接表
第 6 题 单选 未作答

55 位男生和 44 位女生中选出 44 人组成一个学习小组,要求学习小组中男生和女生都有。有多少种不同的选举方法?( )

(2 分)
CSP-J 2025 · 单选 第6题 | 知识点 排列、威尔逊定理
第 7 题 单选 未作答

假设 a,b,ca, b, c 都是布尔变量,逻辑表达式(a && b) || (!c && a) 的值与下列哪个表达式不始终相等?( )

(2 分)
CSP-J 2025 · 单选 第7题 | 知识点 强制类型转换、cin与cout
第 8 题 单选 未作答

已知 f[0]=1,f[1]=1f[0] = 1 , f[1] = 1,并且对于所有 n2n \geq 2f[n]=(f[n1]+f[n2])%7f[n] = (f[n-1] + f[n-2]) \% 7。那么 f[2025]f[2025] 的值是多少?( )

(2 分)
CSP-J 2025 · 单选 第8题 | 知识点 埃氏筛、堆排序
第 9 题 单选 未作答

下列关于 C++ string 类的说法,正确的是?( )

(2 分)
CSP-J 2025 · 单选 第9题 | 知识点 if-else、顺序结构
第 10 题 单选 未作答

考虑以下 C++ 函数:

1  void solve(int &a, int b) {
2      a = a + b;
3      b = a - b;
4      a = a - b;
5  }
6  int main() {
7      int x = 5, y = 10;
8      solve(x, y);
9  }

mainmain 函数调用 solvesolve 后,xxyy 的值分别是?( )

(2 分)
CSP-J 2025 · 单选 第10题 | 知识点 三目运算、位与
第 11 题 单选 未作答

一个 8×88 \times 8 的棋盘,左上角坐标为 (1,1)(1,1),右下角为 (8,8)(8,8)。一个机器人从 (1,1)(1,1) 出发,每次只能向右或向下走一格。要到达 (4,5)(4,5),有多少种不同的路径?( )

(2 分)
CSP-J 2025 · 单选 第11题 | 知识点 排列、可重组合
第 12 题 单选 未作答

某同学用冒泡排序对数组 {6,1,5,2,46, 1, 5, 2, 4} 进行升序排序,请问需要进行多少次元素交换?( )

(2 分)
CSP-J 2025 · 单选 第12题 | 知识点 模拟、排序稳定性
第 13 题 单选 未作答

十进制数 72010720_{10} 和八进制数 2708270_8 的和用十六进制表示是多少?( )

(2 分)
CSP-J 2025 · 单选 第13题 | 知识点 二进制、十六进制
第 14 题 单选 未作答

一棵包含 10001000 个结点的完全二叉树,其叶子结点的数量是多少?( )

(2 分)
CSP-J 2025 · 单选 第14题 | 知识点 完全二叉树、二叉树性质
第 15 题 单选 未作答

给定一个初始为空的整数栈 SS 和一个空的队列 PP。我们按顺序处理输入的整数队列 A:7,5,8,3,1,4,2A: 7, 5, 8, 3, 1, 4, 2。对于队列 AA 中的每一个数,执行以下规则:如果该数是奇数,则将其压入栈 SS;如果该数是偶数,且栈 SS 非空,则弹出一个栈顶元素,并加入到队列 PP 的末尾;如果该数是偶数,且栈 SS 为空,则不进行任何操作。当队列 AA 中的所有数都处理完毕后,队列 PP 的内容是什么?( )

(2 分)
CSP-J 2025 · 单选 第15题 | 知识点 栈、双端队列、泛洪算法
第 16~21 题 阅读程序 (共 13 分) 未作答

1  #include <algorithm>
2  #include <cstdio>
3  #include <cstring>
4  inline int gcd(int a, int b) {
5      if (b == 0)
6      return a;
7      return gcd(b, a % b);
8  }
9  int main() {
10      int n;
11      scanf("%d", &n);
12      int ans = 0;
13      for (int i = 1; i <= n; ++i) {
14          for (int j = i + 1; j <= n; ++j) {
15              for (int k = j + 1; k <= n; ++k) {
16                  if (gcd(i, j) == 1 && gcd(j, k) == 1
17                  && gcd(i, k) == 1) {
18                      ++ans;
19                  }
20              }
21          }
22      }
23      printf("%d\n", ans);
24      return 0;
25  }

16.

当输入为 2 时,程序并不会执行第 1616 行的判断语句。( )

(1 分)
17.

将第 1616 行中的 && gcd(i,k)==1 删去不会影响程序运行结果。

(1.5 分)
18.

当输入的 n3n \ge 3 的时候,程序总是输出一个正整数。

(1.5 分)
19.

将第 77 行的 gcd(b,a%b) 改为 gcd(a,a%b) 后,程序可能出现的问题是( )

(3 分)
20.

当输入为 8 的时候,输出为

(3 分)
21.

调用 gcd(36,42) 会返回

(3 分)
CSP-J 2025 · 阅读程序 第16-21题 | 知识点 欧拉筛、归并排序
第 22~27 题 阅读程序 (共 13.5 分) 未作答

1  #include <algorithm>
2  #include <cstdio>
3  #include <cstring>
4  #define ll long long
5 
6  int n, k;
7  int a[200007];
8  int ans[200007];
9 
10  int main() {
11      scanf("%d%d", &n, &k);
12      for (int i = 1; i <= n; ++i) {
13          scanf("%d", &a[i]);
14      }
15      std::sort(a + 1, a + n + 1);
16      n = std::unique(a + 1, a + n + 1) - a - 1;
17      for (int i = 1, j = 0; i <= n; ++i) {
18          for (; j < i && a[i] - a[j + 1] > k; ++j)
19          ;
20          ans[i] = ans[j] + 1;
21      }
22      printf("%d\n", ans[n]);
23      return 0;
24  }

22.

当输入为 3 1 3 2 1 时,输出结果为 22。( )

(1.5 分)
23.

假设输入的 n 为正整数,输出的答案一定满足 n\le n1\ge 1。( )

(1.5 分)
24.

将第 1414 行的:

1  n = std::unique(a + 1, a + n + 1) - a - 1;

删除后,有可能出现与原本代码不同的输出结果。( )

(1.5 分)
25.

假设输入的 a 数组和 k 均为正整数,执行第 1818 行代码时,一定满足的条件 不包括( )。

(3 分)
26.

当输入为:n = 100, k = 2, a = {1, 2, ..., 100} 时,输出为( )。

(3 分)
27.

假设输入的 a 数组和 k 均为正整数,但 a 数组不一定有序,则若误删去第 1313 行的:

std::sort(a + 1, a + n + 1);

程序有可能出现的问题有( )。

(3 分)
CSP-J 2025 · 阅读程序 第22-27题 | 知识点 快速排序、二分查找、线性DP
第 28~33 题 阅读程序 (共 13.5 分) 未作答

1  #include <algorithm>
2  #include <cstdio>
3  #include <cstring>
4  #define ll long long
5  int f[5007][5007];
6  int a[5007], b[5007];
7  int n;
8  int main(){
9      scanf("%d", &n);
10      for (int i = 1; i <= n; ++i) {
11          scanf("%d", &a[i]);
12      }
13      for (int i = 1; i <= n; ++i) {
14          scanf("%d", &b[i]);
15      }
16      for (int i = 1; i <= n; ++i) {
17          for (int j = 1; j <= n; ++j) {
18              f[i][j] = std::max(f[i][j], std::max(f[i - 1][j], f[i][j - 1]));
19              if (a[i] == b[j]) {
20                  f[i][j] = std::max(f[i][j], f[i - 1][j - 1] + 1);
21              }
22          }
23      }
24      printf("%d\n", f[n][n]);
25      return 0;
26  }

28.

当输入为 4 1 2 3 4 1 3 2 2 时,输出为 22。( )

(1.5 分)
29.

当程序运行完毕后,对于所有的 1i,jn1 \le i,j \le n,都一定有 f[i][j]f[n][n]f[i][j] \le f[n][n]。( )

(1.5 分)
30.

将第 1818 行的 f[i][j] = std::max(f[i][j], std::max(f[i - 1][j], f[i][j - 1])); 删去后,并不影响程序运行结果。( )

(1.5 分)
31.

输出的答案满足的性质有( )。

(3 分)
32.

如果在第 1616 行的循环前加上以下两行:

1  std::sort(a + 1, a + n + 1);
2  std::sort(b + 1, b + n + 1);

则答案会( )。

(3 分)
33.

如果输入的 a = {1, 2, ..., n},而且 b 数组中数字均为 1n1 \sim n 中的正整数,则上述代码等价于下面哪个问题?( )

(3 分)
CSP-J 2025 · 阅读程序 第28-33题 | 知识点 插入排序、字符ASCII运算
第 34~38 题 完善程序 (共 15 分) 未作答

(字符串解码)“行程长度编码”(Run-Length Encoding)是一种无损压缩算法,常用于压缩重复字符较多的数据,以减少存储空间。假设原始字符串不包含数字字符。压缩规则如下:

i) 如果原始字符串中一个字符连续出现 NN 次(N>2N > 2),在压缩字符串中它被表示为“字符 + 数字 NN”。例如,编码 A12 代表 1212 个连续的字符 A

ii) 如果原始字符串中一个字符只出现 11 次,在压缩字符串中它就表示为该字符本身。例如,编码 B 代表 11 个字符 B

以下程序实现读取压缩字符串并输出其原始的、解压后的形式。试补全程序。

1  #include <cctype>
2  #include <iostream>
3  #include <string>
4  using namespace std;
5 
6  int main() {
7      string z;
8      cin >> z;
9      string s = "";
10 
11      for (int i = 0; i < z.length(); ) {
12          char ch = z[i];
13 
14          if (___①___ && isdigit(z[i + 1])) {
15              i++;
16              int count = 0;
17              while (i < z.length() && isdigit(z[i])) {
18                  count = ___②___;
19                  i++;
20              }
21              for (int j = 0; j < ___③___; ++j) {
22                  s += ch;
23              }
24          } else {
25              s += ___④___;
26              ___⑤___;
27          }
28      }
29 
30      cout << s << endl;
31      return 0;
32  }

34.

①处应填( )

(3 分)
35.

②处应填( )

(3 分)
36.

③处应填( )

(3 分)
37.

④处应填( )

(3 分)
38.

⑤处应填( )

(3 分)
CSP-J 2025 · 完善程序 第34-38题 | 知识点 泛洪算法、if-else、字符型
第 39~43 题 完善程序 (共 15 分) 未作答

(精明与糊涂)有 NN 个人,分为两类:

i) 精明人:永远能正确判断其他人是精明还是糊涂。

ii) 糊涂人:判断不可靠,会给出随机的判断。

已知精明人严格占据多数,即如果精明人有 kk 个,则满足 k>N2k > \frac{N}{2}

你只能通过函数 query(i, j) 让第 ii 个人判断第 jj 个人:返回 true 表示判断结果为“精明人”;返回 false 表示判断结果为“糊涂人”。你的目标是,通过这些互相判断,找出至少一个百分之百能确定的精明人。同时,你无需关心 query(i, j) 的内部实现。

以下程序利用“精明人占多数”的优势。设想一个“消除”的过程,让人们互相判断并进行抵消。经过若干轮抵消后,最终留下的候选者必然属于多数派,即精明人。

例如,假设有三个人 001122。如果 0011 是糊涂人,而 11 也说 00 是糊涂人,则 0011 至少有一个是糊涂人。程序将同时淘汰 0011。由于三人里至少有两个精明人,我们确定 22 是精明人。试补全程序。

1  #include <iostream>
2  #include <vector>
3  using namespace std;
4 
5  int N;
6  bool query(int i, int j);
7 
8  int main() {
9      cin >> N;
10 
11      int candidate = 0;
12      int count = ___①___;
13 
14      for (int i = 1; i < N; ++i) {
15          if (___②___) {
16              candidate = i;
17              count = 1;
18          } else {
19              if (___③___) {
20                  ___④___;
21              } else {
22                  count++;
23              }
24          }
25      }
26 
27      cout << ___⑤___ << endl;
28      return 0;
29  }

39.

①处应填( )

(3 分)
40.

②处应填( )

(3 分)
41.

③处应填( )

(3 分)
42.

④处应填( )

(3 分)
43.

⑤处应填( )

(3 分)
CSP-J 2025 · 完善程序 第39-43题 | 知识点 二分查找、强制类型转换