CSP-J初赛真题解析:计算机基础、进制转换与组合计数高频考点
简介:面向备战CCF非专业级别软件能力认证(CSP)入门级初赛的考生与信息学教练,这份资料聚焦J组初赛客观题训练,帮助读者熟悉题型结构、检验知识盲区并对照答案自查。内容涵盖计算机基础与数据类型、进制与编码转换、排列组合计数、格雷码、存储单位换算、C++基本语法与循环语句辨析,以及栈的出入栈顺序判定等高频考点,每题附有答案与简要推导过程,便于边做边核对思路。资源包共1个doc文件,约17KB,以文字试题与解析为主,轻量易读,适合打印或导入平板随时练习。目前已有795人学习下载,可作为初赛冲刺阶段的专项刷题材料,也可供教师拆解为课堂例题使用。
1. 初赛不是“背概念”,是抢下那些不该丢的分
CSP-J 初赛最反直觉的一点:它不考你会不会写高深算法,而是考你能不能在 90 分钟里把该拿的分稳稳拿住。很多备考的人一上来就刷难题,结果栽在 int 范围、进制转换、组合计数这些“看着会、一做就错”的题上。这份 2024 年 CSP-J 组初赛试题与答案解析,价值不在题量,而在于它把初赛的真实考法摊开了:单项选择题考的是计算机基础、进制与编码、组合数学、语言语法、数据结构常识,每题 2 分上下,错三道就掉一个档次。适合谁?适合已经学过 C++ 基础语法、正在从“能写代码”转向“能过初赛”的考生,也适合带队的教练拿来当诊断卷。下面按考点模块拆,每块都落到真题和答题思路上,你照着练就行。
2. 计算机基础与数据表示:int 范围、单位换算、格雷码三连击
这一块是初赛的“送分区”,也是翻车率最高的区。原因很简单:知识点太碎,考生觉得“这我肯定知道”,结果一上考场,边界值记混、单位换错、格雷码推反。先把这三类题的套路吃透,等于白捡 6 到 8 分。
2.1 int 存储范围:为什么答案永远是“负多一个”
真题第 1 题:32 位 int 类型的存储范围是()。四个选项的差别全在边界上——A 是 -2147483647~+2147483647,B 是 -2147483647~+2147483648,C 是 -2147483648~+2147483647,D 是 -2147483648~+2147483648。正确答案 C。
这类题面试官(出题人)最想看你知不知道补码表示:32 位里最高位是符号位,负数用补码存,所以负数能表示到 -2^31,正数只能到 2^31-1。记忆口诀就一句:负的比正的多一个。算的时候别硬背数字,先写 -2^31~2^31-1,再展开:2^31 = 2147483648,所以范围是 -2147483648~2147483647。
易错在哪?很多人选 A,因为“对称好看”;选 B 或 D 的,是把正负边界搞反了。答题时如果记不清,用 8 位类比:8 位有符号范围是 -128~127,负的比正的多 1,套到 32 位就不会错。
2.2 进制混合运算:先统一,再算,别跳步
真题第 2 题:计算 (148 - 10102) * D16 - 11012 的结果,选十进制值。选项 13、14、15、16,答案 A(13)。
这题的下标其实是进制标记:148 是八进制 14,10102 是二进制 1010,D16 是十六进制 D,11012 是二进制 1101。出题人故意把下标写小、混在一起,考的就是你先转十进制再运算的习惯。转完是 (12-10)×13-13 = 2×13-13 = 13。
答题模板固定三步:第一步,逐个识别进制(看下标或字母);第二步,全部转成十进制,写在草稿上;第三步,按正常四则运算算。别在混合进制里直接加减,那是血泪经验——二进制借位和十进制借位规则不同,混着算必错。
提示:十六进制里 A~F 对应 10~15,D 就是 13,这个映射要背到条件反射。
2.3 存储单位换算:1MB 到底多少 bit
真题第 5 题:1Kb 为 1024 字节,1MB 为 1024KB,1MB 是多少二进制位?答案 D,8388608。
这题考的是“字节到比特乘 8”这个动作。计算链:1MB = 1024KB = 1024×1024 字节 = 1048576 字节,再乘 8 = 8388608 bit。选项里 B 是 1048576(只算到字节),C 是 8000000(用 1000 近似),都是典型陷阱。
答题时养成习惯:题目问 bit 就乘 8,问 byte 就停。单位题最怕“看漏一个字”,把“二进制位”看成“字节”,分就没了。
2.4 格雷码:相邻只差一位,推着走
真题第 4 题:以下哪个序列对应数组 0 至 8 的 4 位二进制格雷码?答案 D:0000,0001,0011,0010,0110,0111,0101,0100。
格雷码的定义是相邻两个编码只有一位不同。答题不用背全表,用“翻转位”规律推:从 0000 开始,每次翻转最右边能翻且不重复的位,保证只变一位。或者用公式:第 i 个格雷码 = i ^ (i>>1)。比如 i=3,3^(3>>1)=3^1=2,即 0010,和 D 序列第 4 个对得上。
易错点是选项 A、B、C 都在中间某处出现了“变两位”的情况,比如 A 的 0111 到 0101 变了两位。答题时逐个相邻对检查“是否只差一位”,比整体背序列靠谱。
3. 组合数学与计数:至少一个的反面思路
组合计数是初赛区分度最高的一块,会的人 30 秒出答案,不会的人列半天还漏情况。核心就两个工具:分类加法、分步乘法,外加“正难则反”。
3.1 部门分组题:按“谁出 2 人”分类
真题第 3 题:10 名员工分 3 个部门,A 有 4 人、B 有 3 人、C 有 3 人,选 4 人且每个部门至少 1 人,有多少种?答案 B,126。
标准解法是按“哪个部门出 2 人”分三类:
- A 出 2 人:C(4,2)×C(3,1)×C(3,1) = 6×3×3 = 54
- B 出 2 人:C(3,2)×C(4,1)×C(3,1) = 3×4×3 = 36
- C 出 2 人:C(3,2)×C(4,1)×C(3,1) = 3×4×3 = 36
合计 54+36+36 = 126。
这类题通常这么答:先确定“4 人分给 3 个部门且每部门至少 1 人”,人数分配只能是 2+1+1,于是枚举“2 人来自哪个部门”,三类互斥,直接相加。面试官最想听的是你有没有“分类不重不漏”的意识,而不是硬算。
3.2 反面思路:什么时候用“总数减不合法”
如果题目改成“至少一个部门没人”,正面分类会很碎,这时候用反面:总数 C(10,4) 减去“每部门至少 1 人”的 126。总数是 210,答案就是 84。判断标准很简单:正面情况超过三类,就考虑反面。
注意:组合题最容易错在“重复计数”。比如先给每部门选 1 人再随便选第 4 人,会把 2+1+1 的分配算重,这是经典翻车点,别用这种“先保底再补人”的错法。
3.3 真题演练:把分类思想迁移到新题
假设题目改成:从 5 名男生、4 名女生中选 3 人,至少 1 名女生。正面分“1 女 2 男、2 女 1 男、3 女”三类:C(4,1)C(5,2)+C(4,2)C(5,1)+C(4,3) = 40+30+4 = 74。反面是 C(9,3)-C(5,3) = 84-10 = 74,两种方法对得上,说明分类没错。
答题时建议先用反面算一遍、正面验一遍,时间够就双保险。初赛选择题没有过程分,但你自己验算能避免“分类漏一类”的玄学错误。
4. 语言语法与数据结构:基本类型、循环语句、栈的出栈序列
这块考的是“你写过的代码有没有真的进脑子”。题目不难,但选项里埋的都是“别的语言的习惯”和“看起来像对的”。
4.1 基本数据类型:struct 为什么不是
真题第 6 题:以下哪个不是 C++ 中的基本数据类型?选项 Int、float、struct、char,答案 C(struct)。
C++ 基本内置类型就那几类:整型(int、short、long 等)、浮点(float、double)、字符(char)、布尔(bool)、void。struct 是用户自定义的复合类型,不是基本类型。这题考的是概念边界,不是语法细节。
答题思路:遇到“哪个不是基本类型”,先排除内置关键字,剩下的自定义构造(struct、class、union、enum)就是答案。易错点是有人把 Int 大写当成错误项,其实 C++ 关键字区分大小写,但题目考的是“类型分类”,不是拼写,别被带偏。
4.2 循环语句:repeat-until 是别的语言
真题第 7 题:以下哪个不是 C++ 中的循环语句?for、while、do-while、repeat-until,答案 D。
C++ 的循环就三种:for、while、do-while。repeat-until 是 Pascal、Lua 等语言的“直到型循环”,C++ 没有。这题属于“语言常识”,背下来就行。
答题时如果拿不准,想 C++ 的循环关键字:for、while、do,三个都出现过就是全对,多出来的就是错的。这类题通常这么答:先确认语言,再对关键字,不要用“我好像见过”来判断。
4.3 栈的出栈序列:模拟入栈出栈过程
真题编程题示例:入栈顺序 1~6,哪个出栈顺序不可能?答案 D:1,3,5,2,4,6。
判断方法:用一个栈模拟。对目标序列从左到右,能入栈就入栈,栈顶等于当前要出的就弹出,最后看能不能全部弹出。D 序列里,1 出栈后要出 3,此时 2 还在栈里压着 3 下面,3 出栈后栈顶是 2,但序列下一个要 5,5 还没入栈,可以入栈 4、5,5 出栈后栈顶是 4,序列要 2,但 4 压着 2,出不来,矛盾。
答题模板:目标序列当前元素 = 栈顶就弹,否则继续入栈;入栈到底还弹不出,就是不可能。这类题面试官最想看你有没有“栈是后进先出”的模拟意识,而不是背结论。
提示:出栈序列题不要试图找规律硬猜,老老实实画栈,六步之内必出结果。
5. 易错点复盘:五类一错就掉档的题
初赛的失分往往不是不会,而是“会但做错”。下面五条是这份卷子里最典型的坑,每条按“错在哪、为什么错、怎么答对”拆开。
5.1 int 范围选成对称区间
错在哪:选了 -2147483647~+2147483647 或带 +2147483648 的选项。为什么错:把补码表示当成“正负对称”,忽略了 0 占一个正数位。怎么答对:记“负的比正的多一个”,用 8 位 -128~127 类比验证。
5.2 进制题不转十进制直接算
错在哪:在二进制、八进制、十六进制混合式里直接加减。为什么错:不同进制的借位规则不同,混算必错。怎么答对:先全部转十进制,草稿上写清每个数的十进制值,再运算。
5.3 组合题“先保底再补人”导致重复
错在哪:先给每个部门选 1 人,再从剩下 7 人里选 1 人。为什么错:2+1+1 的分配会被算两次(先选的那 1 人和后补的那 1 人互换顺序)。怎么答对:按“哪个部门出 2 人”分类,三类互斥,或者用反面总数减法。
5.4 单位换算漏乘 8
错在哪:1MB 算成 1048576 就选了。为什么错:题目问的是 bit,字节到比特要乘 8。怎么答对:读题时圈出“二进制位/字节”,问 bit 就乘 8,问 byte 就停。
5.5 出栈序列靠感觉判断
错在哪:看着“差不多”就选,没模拟。为什么错:栈的合法性只有模拟能保证,直觉在 5 个元素以上就失效。怎么答对:画栈,按“能弹就弹、不能弹就入栈”走一遍,走不通就是不可能。
6. 考场答题节奏:先扫送分题,再啃计数,最后回头验算
初赛 90 分钟,选择题 15 道左右加阅读程序、完善程序,时间分配比知识点更致命。我的习惯是开考先花 3 分钟扫一遍单选,把 int 范围、单位换算、语言语法这类“看一眼就知道”的题先做掉,这部分目标 10 分钟内拿满,因为它们不该丢分。剩下时间留给进制混合运算和组合计数,这两类需要草稿,慢一点没关系,但要保证每一步写下来。
具体节奏可以这样切:
| 题型 | 建议用时 | 策略 |
|---|---|---|
| 基础概念(类型、循环、单位) | 8~10 分钟 | 直接选,不纠结 |
| 进制与编码 | 10~12 分钟 | 全部转十进制,写草稿 |
| 组合计数 | 12~15 分钟 | 先分类,再用反面验 |
| 栈/队列等结构题 | 8~10 分钟 | 画图模拟,不硬猜 |
| 阅读程序与完善程序 | 剩余时间 | 先看输入输出,再逐空推 |
阅读程序题有个技巧:先看它问什么,再带着问题读代码,别从头到尾逐行翻译。完善程序题先判断算法意图(是排序、递推还是模拟),意图对了,空基本能填对。
押题方向上,int 范围、进制转换、组合“至少一个”、栈的出栈序列这四类几乎年年变形出现,把这份卷子里的七道单选和那道栈题吃透,等于覆盖了初赛单选的大半套路。易错点那五条,考前再过一遍,比刷新题有用。
从那以后我每次带人备初赛,都强制先做一遍“基础概念 + 进制 + 组合”三件套,限时 30 分钟,错哪类就补哪类,不贪多。希望帮到你。
本文还有配套的精品资源,点击获取