惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Spread Privacy
Spread Privacy
T
Troy Hunt's Blog
Recent Announcements
Recent Announcements
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Schneier on Security
罗磊的独立博客
T
The Exploit Database - CXSecurity.com
博客园 - 司徒正美
月光博客
月光博客
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Project Zero
Project Zero
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
L
Lohrmann on Cybersecurity
阮一峰的网络日志
阮一峰的网络日志
C
CERT Recently Published Vulnerability Notes
腾讯CDC
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
T
Threat Research - Cisco Blogs
T
Tenable Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - Franky
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
Attack and Defense Labs
Attack and Defense Labs
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
Scott Helme
Scott Helme
小众软件
小众软件
L
LINUX DO - 最新话题
博客园 - 叶小钗
博客园 - 【当耐特】
PCI Perspectives
PCI Perspectives
SecWiki News
SecWiki News
S
Security Affairs
P
Palo Alto Networks Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
SegmentFault 最新的问题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 聂微东
量子位
C
CXSECURITY Database RSS Feed - CXSecurity.com
Help Net Security
Help Net Security
S
Secure Thoughts
S
Securelist

OneCoder

【NOIP】2015真题解析 luogu-P2678 跳石头(适合GESP六级以上练习) 【GESP】C++六级练习 luogu-B2174, 完全背包 【NOIP】2005真题解析 luogu-P1048 采药(适合GESP六级以上练习) 【GESP】C++六级真题 luogu-P17013, [GESP202606 六级] 满二叉树 【GESP】C++六级真题 luogu-P17012, [GESP202606 六级] 条形蛋糕 【GESP】C++五级真题 luogu-P17011 [GESP202606 五级] 晚宴 【GESP】C++五级真题 luogu-P17010 [GESP202606 五级] 排排坐 【GESP】C++四级真题 luogu-B4558 [GESP202606 四级] 身高体重指数 【GESP】C++四级真题 luogu-B4557 [GESP202606 四级] 扫雷 【GESP】C++三级真题 luogu-B4556 [GESP202606 三级] 字符转换 【GESP】C++三级真题 luogu-B4555 [GESP202606 三级] 加密 【GESP】C++二级真题 luogu-B4554 [GESP202606 二级] 菱形 【GESP】C++二级真题 luogu-B4553 [GESP202606 二级] 完全平方数计数 【GESP】C++一级真题 luogu-B4551 [GESP202606 一级] 去旅行 【GESP】C++一级真题 luogu-B4552 [GESP202606 一级] 交税 【NOIP】2000真题解析 luogu-P1023 税收与补贴问题(适合GESP四、五级以上练习) 【NOIP】2000真题解析 luogu-P1022 计算器的改良(适合GESP四、五级以上练习) 【NOIP】2001真题解析 luogu-P1029 最大公约数和最小公倍数问题 【CSP】CSP-X 2018真题 11的倍数 luogu-B4075 (适合GESP三级及以上考生练习) 【CSP】CSP-X 2018真题 统计成绩 luogu-B4074 (适合GESP二级及以上考生练习) 【CSP】CSP-X 2018真题 快递费用 luogu-B4073 (适合GESP二级及以上考生练习) 【CSP】CSP-X 2018真题 小明的照片 luogu-B4072 (适合GESP一级及以上考生练习) 【GESP】C++四级练习 luogu-P1138 第 k 小整数 【NOIP】2008真题解析 luogu-P1125 笨小猴 【信奥业余科普】C++ 的奇妙之旅 29:别让 TLE 和 MLE 偷走你的分——复杂度估算与数据范围速查 【信奥业余科普】C++ 的奇妙之旅 28:规范比赛代码的钥匙——文件操作与输入输出重定向(freopen) 【CSP】CSP-J 2023真题 公路 luogu-P9749 (适合GESP四级及以上考生练习) 【信奥业余科普】C++ 的奇妙之旅 27:高效处理数据的利器——常用算法库(algorithm) 【CSP】CSP-J 2022真题 解密 luogu-P8814 (适合GESP四级及以上考生练习) 【信奥业余科普】C++ 的奇妙之旅 26:高效的键值对——映射(map)与多重映射(multimap) 【CSP】CSP-J 2022真题 乘方 luogu-P8813 (适合GESP二级及以上考生练习) 【信奥业余科普】C++ 的奇妙之旅 25:自动排序的利器——集合(set)与多重集合(multiset) 【CSP】CSP-J 2019真题 纪念品 luogu-P5662 (适合GESP六级及以上考生练习) 【信奥业余科普】C++ 的奇妙之旅 24:拆解 deque——分段连续的双端队列 【信奥业余科普】C++ 的奇妙之旅 23:主动限制的艺术——栈(stack)与队列(queue)
【CSP】CSP-J 2024 第一轮真题解析(一):单项选择题
OneCoder · 2026-07-24 · via OneCoder

2024 年 CSP-J(入门级)第一轮认证于 2024 年 9 月 21 日举行。本年度试卷延续了CSP初赛一贯的考查风格,涵盖了计算机基础数据类型与存储进制转换组合数学C++ 语法基础数据结构图论入门等多个核心领域。

本文将为您逐题展示原题,并给出深度解析,帮助 CSP-J 备考同学精准对标考点。这也是本系列 CSP-J 2024 第一轮真题解析的第一篇,后续还有阅读程序题和完善程序题的解析,敬请期待。


📌 一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)

第 1 题

原题: 32 位 int 类型的存储范围是( )
A. -2147483647 ~ +2147483647
B. -2147483647 ~ +2147483648
C. -2147483648 ~ +2147483647
D. -2147483648 ~ +2147483648

正确答案: C

深度解析: 本题考查 C++ 中 32 位有符号整数的补码表示范围

32 位有符号整数采用补码(Two’s Complement)表示。其中:

  • 最高位为符号位(0 表示正、1 表示负)
  • 剩余 31 位表示数值

因此其范围为 $-2^{31}$ 到 $2^{31} - 1$,即 -2147483648 ~ +2147483647

知识扩展: 注意补码的非对称性——负数端比正数端多 1 个。这是因为 0 只有一种表示方式(全 0),不像原码有 +0 和 -0 之分。常见整数类型的范围:

类型字节数范围
char1-128 ~ 127
short2-32768 ~ 32767
int4$-2^{31}$ ~ $2^{31}-1$
long long8$-2^{63}$ ~ $2^{63}-1$

第 2 题

原题: 计算 $(148 - 1010_2) \times D{16} - 1101_2$ 的结果是( )
A. 13
B. 14
C. 15
D. 16

正确答案: A

深度解析: 本题考查 多进制之间的混合运算。解题关键:先将所有数统一转换成十进制,再进行四则运算。

  • $14_8 = 1 \times 8 + 4 = 12$
  • $1010_2 = 1 \times 8 + 0 \times 4 + 1 \times 2 + 0 = 10$
  • $D_{16} = 13$
  • $1101_2 = 1 \times 8 + 1 \times 4 + 0 \times 2 + 1 = 13$

代入原式:

\[(12 - 10) \times 13 - 13 = 2 \times 13 - 13 = 26 - 13 = 13\]

知识扩展: 进制转换是 CSP 初赛的常考题型。记住以下技巧:

  • 八进制每位权值:$8^0 = 1, 8^1 = 8, 8^2 = 64$
  • 十六进制中 A~F 分别代表 10~15
  • 二进制转十进制从右到左按位乘以 $2^n$

第 3 题

原题: 某公司有 10 名员工,分为 3 个部门:A 部门有 4 名员工,B 部门有 3 名员工,C 部门有 3 名员工。现需要从这 10 名员工中选出 4 名组成一个工作组,且每个部门至少要有 1 人。问有多少种选择方式?( )
A. 120
B. 126
C. 132
D. 238

正确答案: B

深度解析: 本题考查 组合数学与分类讨论

每个部门至少选 1 人、总共选 4 人,必然有且仅有一个部门选 2 人。按哪个部门多选 1 人分类讨论:

  • 情况一:A 部门选 2 人,B、C 各选 1 人 \(C_4^2 \times C_3^1 \times C_3^1 = 6 \times 3 \times 3 = 54\)

  • 情况二:B 部门选 2 人,A、C 各选 1 人 \(C_3^2 \times C_4^1 \times C_3^1 = 3 \times 4 \times 3 = 36\)

  • 情况三:C 部门选 2 人,A、B 各选 1 人 \(C_3^2 \times C_4^1 \times C_3^1 = 3 \times 4 \times 3 = 36\)

总计:$54 + 36 + 36 = \mathbf{126}$ 种。

知识扩展: 解组合数学题,要善用 “分类不重不漏” 的思想。本题也可用”补集法”:从 $C_{10}^4 = 210$ 中减去不满足条件的方案数(某个部门无人入选),但分类讨论更直观。


第 4 题

原题: 以下哪个序列对应数字 0 至 8 的 4 位二进制格雷码(Gray code)?( )
A. 0000, 0001, 0011, 0010, 0110, 0111, 0101, 1000
B. 0000, 0001, 0011, 0010, 0110, 0111, 0100, 0101
C. 0000, 0001, 0011, 0010, 0100, 0101, 0111, 0110
D. 0000, 0001, 0011, 0010, 0110, 0111, 0101, 0100

正确答案: D

深度解析: 本题考查 格雷码(Gray Code) 的生成规则。

格雷码的核心特征:相邻两个码字之间仅有一位不同

4 位格雷码序列(0~15)的前 9 个(0~8)为:

十进制二进制格雷码
000000000
100010001
200100011
300110010
401000110
501010111
601100101
701110100
810001100

知识扩展: 二进制数 $B$ 转格雷码 $G$ 的公式:$G = B \oplus (B » 1)$。格雷码在数字电路、传感器编码和纠错码中有广泛应用,因为相邻编码只变化一位,可避免竞争冒险问题。

用 C++ 实现:

1
2
3
int binaryToGray(int n) {
    return n ^ (n >> 1);
}


第 5 题

原题: 记 1KB 为 1024 字节(byte),1MB 为 1024KB,那么 1MB 是多少二进制位(bit)?( )
A. 1000000
B. 1048576
C. 8000000
D. 8388608

正确答案: D

深度解析: 本题考查 存储容量的单位换算

计算过程:

\[1 \text{MB} = 1024 \text{KB} = 1024 \times 1024 \text{B} = 1048576 \text{B}\] \[1048576 \text{B} \times 8 \text{bit/B} = 8388608 \text{bit}\]

知识扩展: 注意 B(Byte)和 b(bit)的区别。1 Byte = 8 bits。在网络带宽中常用 bps(bits per second),而文件大小常用 Bytes。

选项 B 的 1048576 正好是 $1024^2$,即 1MB 的字节数,这是一个常见的干扰项。


第 6 题

原题: 以下哪个不是 C++ 中的基本数据类型( )
A. int
B. float
C. struct
D. char

正确答案: C

深度解析: 本题考查 C++ 数据类型的分类

C++ 的数据类型分为两大类:

  • 基本数据类型(内置类型):intfloatdoublecharbool
  • 复合数据类型(用户自定义类型):structclassunionenum

struct 是用于定义结构体的关键字,属于复合数据类型,而非基本数据类型。

知识扩展: C++ 中常见基本数据类型及其大小:

类型大小说明
bool1 字节布尔值
char1 字节字符
int4 字节整数
float4 字节单精度浮点数
double8 字节双精度浮点数

第 7 题

原题: 以下哪个不是 C++ 中的循环语句( )
A. for
B. while
C. do-while
D. repeat-until

正确答案: D

深度解析: 本题考查 C++ 语言的循环结构

C++ 支持的三种循环结构:

循环类型语法特点
forfor (init; cond; step)已知循环次数时常用
whilewhile (cond)先判断后执行
do-whiledo {...} while (cond)先执行后判断,至少执行一次

repeat-untilPascal 语言 中的循环结构,不是 C++ 的语法。它的功能类似于 do-while,但条件判断逻辑相反(until 条件为真时退出循环,while 条件为真时继续循环)。


第 8 题

原题: 在 C/C++ 中,(char)('a' + 13) 与下面的哪一个值相等?( )
A. ‘m’
B. ‘n’
C. ‘z’
D. ‘l’

正确答案: B

深度解析: 本题考查 ASCII 码与字符运算

字符 'a' 的 ASCII 码值为 97。加上 13 后:

\[97 + 13 = 110\]

ASCII 码 110 对应的字符为 'n'

也可以直接数字母表:a → b → c → … → n,从 a 往后数 13 个位置就是 n。

知识扩展: 常用 ASCII 码值:

大小写转换:'A' + 32 = 'a',即大写转小写加 32。


第 9 题

原题: 假设有序表中有 1000 个元素,则用二分法查找元素 X 最多需要比较( )次。
A. 25
B. 10
C. 7
D. 1

正确答案: B

深度解析: 本题考查 二分查找的最坏时间复杂度

对于长度为 $n$ 的有序数组,二分查找最坏情况下的比较次数为 $\lfloor \log_2 n \rfloor + 1$。

代入 $n = 1000$:

\[\log_2 1000 \approx 9.97\] \[\lfloor 9.97 \rfloor + 1 = 10\]

验证:$2^{9} = 512 < 1000$,$2^{10} = 1024 > 1000$,因此最多需要 10 次 比较。

知识扩展: 二分查找的关键前提是数据已排序。其时间复杂度为 $O(\log n)$,相比线性查找的 $O(n)$ 效率提升巨大。当 $n = 10^6$ 时,线性查找最多需 100 万次,而二分查找仅需约 20 次。


第 10 题

原题: 下面的哪一个不是操作系统名字?( )
A. Notepad
B. Linux
C. Windows
D. macOS

正确答案: A

深度解析: 本题考查 操作系统基础概念

  • LinuxWindowsmacOS 均为常见的计算机操作系统。
  • Notepad(记事本)是 Windows 操作系统自带的文本编辑器(应用程序),并非操作系统。

知识扩展: 常见的操作系统分类:

类型代表系统
桌面操作系统Windows, macOS, Linux (Ubuntu, Fedora 等)
移动操作系统Android, iOS, HarmonyOS
服务器操作系统Linux (CentOS, Debian, RHEL 等), Windows Server
嵌入式/实时系统FreeRTOS, VxWorks

第 11 题

原题: 在无向图中,所有顶点的度数之和等于( )。
A. 图的边数
B. 图的边数的两倍
C. 图的顶点数
D. 图的顶点数的两倍

正确答案: B

深度解析: 本题考查 图论基础——握手定理

在无向图中,每条边连接两个顶点,为每个端点各贡献 1 个度。因此,每条边对度数总和的贡献是 2。

设无向图有 $m$ 条边,所有顶点的度数之和 $= 2m$,即图的边数的两倍

这就是著名的握手定理(Handshaking Lemma)

\[\sum_{v \in V} \deg(v) = 2|E|\]

知识扩展: 握手定理的推论——任何图中,度数为奇数的顶点个数必为偶数。这是一个非常有用的结论,在判断图的连通性和欧拉路径的存在性时经常用到。


第 12 题

原题: 已知二叉树的前序遍历为 $[A, B, D, E, C, F, G]$,中序遍历为 $[D, B, E, A, F, C, G]$,请问该二叉树的后序遍历结果是?( )
A. $[D, E, B, F, G, C, A]$
B. $[D, E, B, F, G, A, C]$
C. $[D, B, E, F, G, C, A]$
D. $[D, B, E, F, G, A, C]$

正确答案: A

深度解析: 本题考查 二叉树的构建与遍历(已知前序和中序求后序)

解题步骤:

  1. 寻找根节点
    • 前序遍历首位元素为 A,故整棵二叉树的根节点为 A
  2. 划分左右子树
    • 在中序遍历中找到 A[D, B, E] 为左子树元素,[F, C, G] 为右子树元素。
  3. 递归构建左子树
    • 左子树前序为 [B, D, E],根节点为 B
    • 在中序 [D, B, E] 中,B 的左节点为 D,右节点为 E
  4. 递归构建右子树
    • 右子树前序为 [C, F, G],根节点为 C
    • 在中序 [F, C, G] 中,C 的左节点为 F,右节点为 G
  5. 总结树的结构与求后序遍历
    • 树结构为:根 A,左子节点 B(下接 DE),右子节点 C(下接 FG)。
    • 后序遍历顺序(左 → 右 → 根)
      • 左子树后序:D, E, B
      • 右子树后序:F, G, C
      • 根节点:A
      • 合并结果:[D, E, B, F, G, C, A]

知识扩展:

  • 前序遍历(Pre-order):根 → 左 → 右
  • 中序遍历(In-order):左 → 根 → 右
  • 后序遍历(Post-order):左 → 右 → 根

必须包含中序遍历才能唯一确定一棵二叉树(即前序+中序,或后序+中序)。仅已知前序和后序在多数情况下无法唯一确定二叉树形态。


第 13 题

原题: 给定一个空栈,支持入栈和出栈操作。若入栈操作的元素依次是 1 2 3 4 5 6,其中 1 最先入栈,6 最后入栈,下面哪种出栈顺序是不可能的?( )
A. 6 5 4 3 2 1
B. 1 6 5 4 3 2
C. 2 4 6 5 3 1
D. 1 3 5 2 4 6

正确答案: D

深度解析: 本题考查 栈的合法出栈序列判定,是 CSP 初赛的高频考点。

栈的核心特性是 LIFO(后进先出)。逐一模拟验证:

✅ A. 6 5 4 3 2 1 全部压入后依次弹出,即标准的完全逆序输出,显然合法。

✅ B. 1 6 5 4 3 2

操作栈状态(底→顶)已输出
push 1, pop 1[]1
push 2~6[2,3,4,5,6]1
pop 6,5,4,3,2[]1 6 5 4 3 2

合法。

✅ C. 2 4 6 5 3 1

操作栈状态已输出
push 1,2 → pop 2[1]2
push 3,4 → pop 4[1,3]2 4
push 5,6 → pop 6,5,3,1[]2 4 6 5 3 1

合法。

❌ D. 1 3 5 2 4 6

操作栈状态已输出
push 1 → pop 1[]1
push 2,3 → pop 3[2]1 3
push 4,5 → pop 5[2,4]1 3 5
需要输出 2栈顶是 4💥 失败

关键矛盾:当需要弹出 2 时,42 的上方,必须先弹出 4,但序列要求先出 2 再出 4,这违反了栈的 LIFO 规则。

知识扩展: 判断合法出栈序列,可以用一个辅助栈模拟,时间复杂度 $O(n)$:

1
2
3
4
5
6
7
8
9
10
11
12
bool isValidPopOrder(vector<int>& push, vector<int>& pop) {
    stack<int> s;
    int j = 0;
    for (int x : push) {
        s.push(x);
        while (!s.empty() && s.top() == pop[j]) {
            s.pop();
            j++;
        }
    }
    return s.empty();
}

卡塔兰数:对于 $n$ 个元素的入栈序列,合法的出栈序列总数为卡塔兰数 $C_n = \frac{1}{n+1}\binom{2n}{n}$。例如 $n = 6$ 时,$C_6 = 132$ 种合法序列(总共 $6! = 720$ 种排列中仅有 132 种合法)。


第 14 题

原题: 有 5 个男生和 3 个女生站成一排,规定 3 个女生必须相邻。问有多少种不同的排列方式?( )
A. 4320 种
B. 5040 种
C. 3600 种
D. 2880 种

正确答案: A

深度解析: 本题考查 排列组合中的”捆绑法”

解题步骤:

  1. 捆绑:将 3 个女生看作一个整体(”超级元素”)
  2. 此时共有 $5 + 1 = 6$ 个元素需要排列
  3. 6 个元素的全排列:$A_6^6 = 6! = 720$ 种
  4. 内部排列:3 个女生在捆绑内部还可以自由排列:$A_3^3 = 3! = 6$ 种

总方案数:

\[720 \times 6 = \mathbf{4320}\]

知识扩展: “捆绑法”用于处理“某些元素必须相邻”的约束。与之对应的是“插空法”,用于处理”某些元素不能相邻”的约束——先排列其他元素,再把受约束的元素插入空隙中。


第 15 题

原题: 编译器的主要作用是什么?( )
A. 直接执行源代码
B. 将源代码转换为机器代码
C. 进行代码调试
D. 管理程序运行时的内存

正确答案: B

深度解析: 本题考查 编译原理基础概念

编译器(Compiler) 的核心功能是将程序员编写的高级语言源代码(如 C++、Java)翻译为计算机能直接执行的机器代码(或目标代码)。

这个过程包括:

  1. 词法分析:将源代码分解为标记(Token)
  2. 语法分析:根据语法规则构建语法树
  3. 语义分析:检查类型匹配等逻辑正确性
  4. 代码优化:提高目标代码的执行效率
  5. 代码生成:生成最终的机器代码

知识扩展:

概念说明
编译器一次性将整个源代码翻译为机器代码(如 g++ 编译 C++)
解释器逐行翻译并执行源代码(如 Python 解释器)
IDE集成开发环境,包含编辑器、编译器、调试器等工具的集合

选项 A 描述的是解释器的功能,选项 C 是调试器(Debugger)的功能,选项 D 是操作系统或运行时内存管理器的职责。


[!TIP] 本篇结语 以上为 CSP-J 2024 第一轮认证(初赛)1~15 题单选题的原题与全解析。后续第二篇将展开阅读程序题的深度解析,第三篇为完善程序题解析,敬请期待!如果你也在备考 CSP-J,欢迎收藏本系列文章,一起刷题提分!

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP 学习专题站:GESP WIKI

"luogu-"系列题目可在洛谷题库进行在线评测。

"bcqm-"系列题目可在编程启蒙题库进行在线评测。

欢迎加入Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答

欢迎加入C++ GESP/CSP认证学习QQ频道,考试资源总结汇总

欢迎加入C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号

GESP/CSP 认证学习微信公众号