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

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
M
MIT News - Artificial intelligence
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
有赞技术团队
有赞技术团队
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
美团技术团队
F
Fortinet All Blogs
I
Intezer
IT之家
IT之家
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Know Your Adversary
Know Your Adversary
P
Proofpoint News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AWS News Blog
AWS News Blog
P
Palo Alto Networks Blog
S
Securelist
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
N
Netflix TechBlog - Medium
TaoSecurity Blog
TaoSecurity Blog
Scott Helme
Scott Helme
Hugging Face - Blog
Hugging Face - Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Project Zero
Project Zero
U
Unit 42
博客园_首页
博客园 - 司徒正美
S
Security Affairs
V
V2EX
T
Threatpost
T
Tailwind CSS Blog
GbyAI
GbyAI
O
OpenAI News
K
Kaspersky official blog
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
H
Hacker News: Front Page
V2EX - 技术
V2EX - 技术
Security Latest
Security Latest

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 认证学习微信公众号