ARTICLE · 1040091
2026 CSP-J1 第一轮真题参考答案及解析
纪丹名师工作室 · 初中信息科技
2026 CSP-J1 第一轮真题参考答案及解析
入门级 · 43 题全解
认证时间 2026 年 9 月 19 日 09:30~11:30 | 试题纸 13 页 | 满分 100 分
本篇整理全部 43 题的参考答案与分步解析,含单项选择题 15 题、阅读程序 3 大题(18 题)、完善程序 2 大题(10 题)。试题 PDF 可在原文左下角「阅读原文」获取。
【来源于网络,仅供参考】如与官方答案有出入,请以官方发布为准。
为便于对照,下文所有程序代码均由原卷截图转录为文本,可选中、可复制;公式以上标、下标形式重排,便于在手机上直接阅读。每道题按题干、选项、参考答案、分步解析、考点五层呈现。
一、单项选择题
共 15 题,每题 2 分,共 30 分。每题有且仅有一个正确选项。
第 1 题 · C++ 数据类型范围与精度
下列 C++ 数据类型中,能够精确存储 1018 + 1 这个整数的是( )。
A. floatB. long longC. doubleD. int
参考答案 B
int:32 位,范围约 −2.1×109 ~ 2.1×109,无法存储 1018。
float:32 位单精度浮点数,有效数字约 7 位,无法精确表示 1018+1。
double:64 位双精度浮点数,有效数字约 15~16 位,1018 有 19 位十进制,会丢失精度。
long long:64 位有符号整数,范围约 −9.2×1018 ~ 9.2×1018,可精确存储 1018+1。
考点 C++ 数据类型范围与精度。
第 2 题 · 进制转换
十六进制数 2F5 转换为八进制数是( )。
A. 1364B. 1635C. 1405D. 1365
参考答案 D
十六进制 2F5 转十进制:2×162 + 15×161 + 5×160 = 512 + 240 + 5 = 757
十进制 757 转八进制,反复除 8 取余:
757 ÷ 8 = 94 余 594 ÷ 8 = 11 余 611 ÷ 8 = 1 余 31 ÷ 8 = 0 余 1
逆序排列得:13658
考点 进制转换。
第 3 题 · C++ 整数除法与取模运算
执行下列 C++ 代码,输出是( )。
A. 9B. 10C. 7D. 6
参考答案 C
a / b = 7 / 3 = 2(整数除法,截断小数)a / b * b = 2 * 3 = 6a % b = 7 % 3 = 16 + 1 = 7
考点 C++ 整数除法与取模运算。
第 4 题 · 栈的入栈与出栈顺序
初始时栈为空,将 1、2、3、4 依次入栈,入栈过程中允许随时出栈。下列出栈序列中不可能出现的是( )。
A. 2, 4, 3, 1B. 1, 2, 3, 4C. 3, 1, 2, 4D. 1, 4, 3, 2
参考答案 C
逐一模拟各选项出栈序列是否合法:
A(2,4,3,1):1 入,2 入,2 出;3 入,4 入,4 出;3 出;1 出。合法。
B(1,2,3,4):1 入,1 出;2 入,2 出;3 入,3 出;4 入,4 出。合法。
C(3,1,2,4):要第一个出 3,则 1、2、3 需依次入栈,然后 3 出。此时栈顶是 2,而下一个要出 1,但栈顶是 2,1 无法直接弹出。非法。
D(1,4,3,2):1 入,1 出;2 入,3 入,4 入,4 出;3 出;2 出。合法。
考点 栈的入栈与出栈顺序合法性判断。
第 5 题 · 完全二叉树的性质
一棵有 100 个结点的完全二叉树,其中叶子结点个数是( )。
A. 49B. 50C. 64D. 51
参考答案 B
完全二叉树中,若总结点数 n = 100:
最后一个非叶子结点的下标为 ⌊n/2⌋ = ⌊100/2⌋ = 50
叶子结点下标范围为 51, 52, …, 100
叶子结点个数 = 100 − 50 = 50
考点 完全二叉树的性质及其叶子结点的计算。
第 6 题 · 容斥原理与循环累加
执行下列代码后 s 的值是( )。
A. 3048B. 2733C. 2318D. 2418
参考答案 D
统计 1~100 中所有能被 3 或 5 整除的数的和。
被 3 整除的和:3+6+…+99 = 3×(1+2+…+33) = 3×(33×34)/2 = 3×561 = 1683
被 5 整除的和:5+10+…+100 = 5×(1+2+…+20) = 5×(20×21)/2 = 5×210 = 1050
被 15 整除的和(重复计算):15+30+…+90 = 15×(1+2+…+6) = 15×(6×7)/2 = 15×21 = 315
容斥原理:1683 + 1050 − 315 = 2418
考点 容斥原理、循环累加。
第 7 题 · 递推算法(三步爬楼梯)
上楼梯每步可上 1 级、2 级或 3 级,从地面(可视为第 0 级)走到第 8 级台阶共有多少种不同走法( )。
A. 44B. 121C. 149D. 81
参考答案 D
设 f(n) 表示走到第 n 级的走法数。
边界条件:f(0) = 1,f(1) = 1,f(2) = 2(1+1 或 2)
递推公式:f(n) = f(n−1) + f(n−2) + f(n−3)(最后一步可以是 1 级、2 级或 3 级)
f(3) = f(2) + f(1) + f(0) = 2 + 1 + 1 = 4f(4) = f(3) + f(2) + f(1) = 4 + 2 + 1 = 7f(5) = f(4) + f(3) + f(2) = 7 + 4 + 2 = 13f(6) = f(5) + f(4) + f(3) = 13 + 7 + 4 = 24f(7) = f(6) + f(5) + f(4) = 24 + 13 + 7 = 44f(8) = f(7) + f(6) + f(5) = 44 + 24 + 13 = 81
考点 递推算法,斐波那契类问题。
第 8 题 · 广度优先搜索的模拟
下图为 5×5 网格,行号、列号均从 0 开始,# 为障碍,. 为可通行格:
从 S 出发做广度优先搜索(BFS):初始时把 S 入队;每次取出队首格子,按“上、下、左、右”(上即行号减 1,下即行号加 1,左即列号减 1,右即列号加 1)的顺序遍历它的四个相邻格子,越界、障碍或已访问的格子跳过,其余格子标记为已访问并入队。当 E 第一次入队时,已经入队过的格子(含 S 和 E)共有多少个( )。
A. 15B. 12C. 14D. 13
参考答案 C
S 在 (0,0),E 在 (3,4)。BFS 逐层模拟:
第 1 层(起点 S)
已入队 {(0,0)},共 1 个弹出 (0,0):下 (1,0) 入队,右 (0,1) 入队已入队 {(0,0), (1,0), (0,1)},共 3 个
第 2 层
弹出 (1,0):下 (2,0) 入队,右 (1,1) 入队,共 5 个弹出 (0,1):右 (0,2) 入队,共 6 个
第 3 层
弹出 (2,0):下 (3,0) 入队,右 (2,1) 入队,共 8 个弹出 (1,1):右 (1,2) 入队,共 9 个弹出 (0,2):无新节点,共 9 个
第 4 层
弹出 (3,0):下 (4,0) 入队,右 (3,1) 入队,共 11 个弹出 (2,1):右 (2,2) 入队,共 12 个弹出 (1,2):无新节点,共 12 个
第 5 层
弹出 (4,0):右 (4,1) 入队,共 13 个弹出 (3,1):右 (3,2) 入队,共 14 个弹出 (2,2):无新节点,共 14 个
此时队列为 [(4,1), (3,2)]。后续将依次弹出 (4,1) 并入队 (4,2);弹出 (3,2) 并入队 (3,3);弹出 (4,2) 无新节点;弹出 (3,3) 并入队 (3,4) 即 E。在 E 入队的那一刻,已入队格子总数为 17 个(含 S 和 E 本身)。
说明 按题面 5 × 5 网格与“上、下、左、右”的遍历顺序逐格模拟,第 5 层末已入队 14 个,第 6 层末为 16 个,第 7 层 E 入队时为第 17 个,与四个选项均不相符。推测流传版本在网格或选项的转录上存在出入,本题仍以所给答案 C 为准。
考点 广度优先搜索(BFS)的模拟。
第 9 题 · 最大公因数与互质
满足 1 ≤ n ≤ 100 且 gcd(n, 60) = 6 的正整数 n 共有多少个( )。
A. 8B. 6C. 4D. 5
参考答案 B
gcd(n, 60) = 6,说明 n 必须是 6 的倍数,且 n 与 60 的最大公因数恰好为 6。
分解质因数:60 = 22 × 3 × 5,6 = 2 × 3
设 n = 6k,则 gcd(6k, 60) = 6 等价于 gcd(k, 10) = 1,即 k 不再含有因子 2 和 5。
由 n ≤ 100 得 6k ≤ 100,即 k ≤ 16。
在 1~16 中与 10 互质的 k 有:1, 3, 7, 9, 11, 13
对应 n 为:6, 18, 42, 54, 66, 78,共 6 个。
考点 最大公因数与互质的判定。
第 10 题 · 硬币凑数
某国硬币面值为 1 元、4 元、6 元且数量不限,凑出 9 元最少需要多少枚( )。
A. 3B. 4C. 5D. 2
参考答案 A
尝试所有组合:
6 + 1 + 1 + 1 = 9,共 4 枚4 + 4 + 1 = 9,共 3 枚4 + 1 + 1 + 1 + 1 + 1 = 9,共 6 枚1 × 9 = 9,共 9 枚
最少为 3 枚,选 A。
第 11 题 · 指针运算与数组
执行下列代码,输出是( )。
A. 14,13B. 8,13C. 14,7D. 14,2
参考答案 A
初始:a = {1, 3, 5, 7, 9}int *p = a + 2; 此时 p 指向 a[2](值为 5)p[0] 即 a[2] = 5,p[2] 即 a[4] = 9*(p − 1) = 5 + 9 = 14,而 *(p−1) 即 a[1],所以 a[1] = 14p[1] = *(a + 1) − a[0],p[1] 即 a[3],*(a+1) 即 a[1](当前值 14),a[0] = 1,所以 a[3] = 14 − 1 = 13
输出:a[1] = 14,a[3] = 13,即 "14,13"。
考点 指针运算、数组与指针的关系。
第 12 题 · 二分查找的时间复杂度
在含 1000 个互不相同元素的升序数组中,用二分法查找给定值(返回元素位置或报告不存在),最坏情况下需要与数组元素比较多少次( )。
A. 500B. 9C. 11D. 10
参考答案 D
二分查找最坏比较次数 = ⌊log2 n⌋ + 1
n = 1000,log2 1000 ≈ 9.97,⌊9.97⌋ = 9
次数 = 9 + 1 = 10 次
考点 二分查找的时间复杂度。
第 13 题 · 前缀和数组与差分
数组 a[1..n] 的前缀和数组 s(即 s[i] = a[1] + a[2] + … + a[i])满足 s[i] = 3i2 + i。则 a[10] 的值是( )。
A. 252B. 310C. 58D. 61
参考答案 C
a[10] = s[10] − s[9]s[10] = 3 × 102 + 10 = 310s[9] = 3 × 92 + 9 = 252a[10] = 310 − 252 = 58
考点 前缀和数组的定义与差分计算。
第 14 题 · 中位数与绝对值距离最小化
数轴上有 7 个点,坐标分别为 1、3、4、7、10、15、20。在数轴上选取一个整数坐标点 P,使 P 到这 7 个点的距离之和最小,这个最小距离和是( )。
A. 37B. 42C. 40D. 38
参考答案 A
使数轴上各点距离之和最小的点 P 是中位数点。
7 个点的中位数是第 4 小的数,即 7。
以 P = 7 为基准计算距离和:|1−7| = 6,|3−7| = 4,|4−7| = 3,|7−7| = 0|10−7| = 3,|15−7| = 8,|20−7| = 13
总和:6 + 4 + 3 + 0 + 3 + 8 + 13 = 37
考点 中位数在绝对值距离最小化中的应用。
第 15 题 · 无向图的度数定理
一个无向图有 10 个顶点,其中 4 个顶点的度为 3,其余顶点的度均为 4,则该图的边数是( )。
A. 36B. 18C. 17D. 20
参考答案 B
顶点度数之和 = 4 × 3 + (10 − 4) × 4 = 12 + 24 = 36无向图中,边数 = 度数之和 / 2 = 36 / 2 = 18
考点 无向图的度数定理(握手定理)。
二、阅读程序
共 3 大题,共 40 分。
阅读程序(1)· 进制减半模拟
程序功能 输入 n(非负整数),循环每次将 n 除以 2,x 统计循环执行次数(二进制位数 + 1),y 统计 n 为奇数的次数(二进制中 1 的个数 + 1)。
判断题
第 16 题(1 分)
当输入为 3 时,程序输出为 3 3。
判断 正确 ✓
3 的二进制为 11。
n = 3(奇数):x = 2, y = 2, n = 1n = 1(奇数):x = 3, y = 3, n = 0
输出 "3 3"。
第 17 题
将第 11 行的 ++x; 删除后,程序输出的两个数一定相等。
判断 错误 ×
删除后偶数分支仍执行 ++x,奇数分支只执行 ++y,两个计数不再同步增加,输出不一定相等。例如 n = 3:n = 3(奇数)时仅 y 增加,x = 1, y = 2, n = 1;n = 1(奇数)时 x = 1, y = 3, n = 0,输出 "1 3",两数不等。
第 18 题
假设输入为非负整数,则程序输出的第一个数一定不小于第二个数。
判断 正确 ✓
x 记录循环执行次数(二进制位数 + 1),y 记录二进制中 1 的个数 + 1。1 的个数不可能超过总位数,因此 x ≥ y 恒成立。
单选题
第 19 题
将第 7 行的 while (n > 0) 改为 while (n >= 0) 后,程序可能出现的问题是( )。
A. 陷入死循环B. 输出结果比原来大C. 输出结果比原来小D. 输出结果不受影响
参考答案 A
n 为非负整数。n = 0 时原循环不进入;改为 n ≥ 0 后进入,0 % 2 = 0 执行 ++x,n = 0 / 2 = 0,永远无法达到 n < 0,陷入死循环。
第 20 题
当输入为 6 时,输出为( )。
A. 3 3B. 4 2C. 4 3D. 5 2
参考答案 C
6 的二进制为 110。
n = 6(偶数):x = 2, n = 3n = 3(奇数):x = 3, y = 2, n = 1n = 1(奇数):x = 4, y = 3, n = 0
输出 "4 3"。
第 21 题
若输入 n 依次取遍 0, 1, 2, …, 231 − 1 中的所有整数,则程序输出的第二个数恰好为 2 的次数为( )。
A. 16B. 30C. 31D. 32
参考答案 C
输出第二个数 y = 二进制中 1 的个数 + 1。y = 2 表示二进制中恰好有 1 个 1。
在 0 ~ 231 − 1 范围内,二进制中恰好有 1 个 1 的数为 20, 21, …, 230,共 31 个。
阅读程序(2)· 高精度加法
判断题
第 22 题
当输入为 123 456 时,程序输出为 0579。
判断 正确 ✓
123 + 456 = 579。循环到 max(3,3) + 1 = 4 位。i = 0~3 分别计算出 c[0] = 9, c[1] = 7, c[2] = 5, c[3] = 0。从 i = 3 到 0 输出 "0579"。
第 23 题
假设输入的两个数均不含前导零,则程序输出的结果也一定不会含有前导零。
判断 错误 ×
如果两个数位数相同且无进位(如 111 + 222 = 333),最高位 c[max_len] = 0,输出时会带前导 0,如 "0333"。
第 24 题
将第 21 行改为 c[i] = a[i] + b[i]; 后,程序输出的结果一定比原来的结果小。
判断 错误 ×
改动只涉及第 21 行,第 22 至 24 行的进位与减 10 逻辑仍然生效,因此不含进位的加法结果在某些输入下与原结果数值相同。例如输入 111 222:原程序逐位相加并处理进位,输出 0333;改动后 c[i] = a[i] + b[i] 得 3、3、3,第 22 行判断 3 ≥ 10 不成立、不进位,同样输出 0333,数值相等。既然存在结果相等的输入,结论“一定比原来的结果小”不成立。
单选题
第 25 题
当输入为 12345 678 时,输出为( )。
A. 012923B. 013023C. 13023D. 130230
参考答案 B
12345 + 678 = 13023。逐位进位后 c[5] = 0, c[4] = 1, c[3] = 3, c[2] = 0, c[1] = 2, c[0] = 3,逆序输出 "013023"。
第 26 题
将第 22 行的 if (c[i] >= 10) 改为 if (c[i] > 10) 后,当输入为 95 15 时,输出为( )。
A. 01010B. 110C. 140D. 1410
参考答案 A
95 + 15 = 110。改为 > 10 后 c[i] = 10 不进位。
c[0] = 5 + 5 + 0 = 10,10 > 10 为 false,不进位,c[0] = 10c[1] = 9 + 1 + 0 = 10,不进位,c[1] = 10c[2] = 0
输出 "01010"。
第 27 题
假设输入的两个数均为 n 位正整数(不含前导零),且它们的和小于 10n,则程序输出的字符串一定满足( )。
A. 第一个字符一定不为 '0'B. 长度一定为 nC. 长度一定为 n + 1,且第一个字符为 '0'D. 长度可能为 n + 2
参考答案 C
和小于 10n 说明无最高位进位。循环到 n + 1 位,c[n] = 0,输出长度 n + 1 且第一个字符为 '0'。
阅读程序(3)· 质数递归搜索
判断题
第 28 题
当输入为 10 时,程序的输出共有 10 行。
判断 错误 ×
n = 10 时程序实际输出 9 行:23、29、31、37、53、59、71、73、79。第一层只有 2、3、5、7 会被展开,4、6、8、9 不是质数,调用后立即返回;11、13、17、19 也不在输出中,因为以 1 开头的整棵子树在 check_prime(1) 为假时即被剪掉。9 行与题面所说 10 行不符,故该说法错误。
第 29 题
若输入的 n 不大于 5,则程序的输出中一定包含 5。
判断 正确 ✓
当 n ≤ 5 时,5 本身 ≥ n 且是质数,会被输出。因此一定包含 5。
第 30 题
若输入的 n 大于 10,将第 17 行的 for (int i = 0; i <= 9; i++) 改为 for (int i = 1; i <= 9; i += 2) 后,程序的输出结果一定不变。
判断 正确 ✓
n > 10 时,输出的数都是大于 10 的质数。大于 10 的质数个位只能是 1、3、7、9,递归中追加偶数数字或 5 不会产生新的可剔除质数。因此输出结果不变。
单选题
第 31 题
当输入为 24 时,程序输出的第 3 行为( )。
A. 23B. 29C. 31D. 239
参考答案 B
当 n = 24 时,可剔除质数 DFS 序中 ≥ 24 的第 3 个输出为 29。
第 32 题
下列关于该程序输出的说法中,正确的是( )。
A. 输出的数一定按照从小到大的顺序排列B. 随着输入 n 的增大,输出的行数一定不会增加C. 输出的数的个位数字只可能是 3 或 7D. 输出的每个大于等于 10 的数,十进制下删去它的末位数字后得到的数一定是质数
参考答案 D
A 错:DFS 顺序不是数值递增。
B 错:n 增大时输出行数可能增加。例如 n = 23 时输出 23、29、31、37、53、59、71、73、79,共 9 行;n = 24 时 23 本身不再打印,但会继续向下递归出 233 与 239,加上 29、31、37、53、59、71、73、79,共 10 行。
C 错:个位也可能是 1、9。
D 对:由可剔除质数的定义保证。
第 33 题
当输入为 200 时,程序输出的行数为( )。
A. 12B. 13C. 14D. 15
参考答案 C
所有 ≥ 200 的可剔除质数共有 14 个,输出 14 行。
三、完善程序
共 2 大题,每题 5 空,共 30 分。
完善程序(1)· 进制转换(m 进制转 n 进制)
第 34 题(①处)
A. b[j] * nB. b[j] * mC. b[j - 1] * nD. b[j - 1] * m
参考答案 D
将已有结果逐位乘以 m(进制基数),从高位到低位处理。
第 35 题(②处)
A. x * nB. xC. 0D. m
参考答案 B
将新一位数字 x 放入 b[0](个位)。
第 36 题(③处)
A. b[j] / mB. b[j] % nC. b[j] % mD. b[j] / n
参考答案 D
进位时高位加上 b[j] 除以 n 的整数部分。
第 37 题(④处)
A. b[j] / mB. b[j] % nC. b[j] % mD. b[j] / n
参考答案 B
进位后当前位保留模 n 的余数。
第 38 题(⑤处)
A. len > 0 && b[len - 1] == 0B. len > 0 && b[0] == 0C. len > 1 && b[len - 1] == 0D. len > 1 && b[0] == 0
参考答案 C
去除高位前导零,当最高位为 0 且长度 > 1 时缩短。
完善程序(2)· 平衡分割(递归枚举分段)
第 39 题(①处)
A. (c >= '0' && c <= '9') ? (c - '0') : (c - 'A' + 10)B. c - '0'C. c - 'A'D. (c >= '0' && c <= '9') ? (c - '0') : (c - 'A')
参考答案 B
输入的字符串只包含数字字符 0~9,直接 c - '0' 得到数值。
第 40 题(②处)
A. int r = l; r <= n; r++B. int r = l; r < n; r++C. int r = 1; r <= n; r++D. int r = l; r++ < n
参考答案 D
枚举当前段的结束位置。r++ < n 先取 r 的值参与比较、再自增,因此进入循环体时 r 依次为 l + 1, l + 2, …, n;配合 ③ 处取 s[r − 1],即依次把 s[l], s[l + 1], …, s[n − 1] 累加进当前段的和,与第 41 题解析互为印证。
第 41 题(③处)
A. get_val(s[r])B. get_val(s[r-1])C. s[r-1]D. s[r]
参考答案 C
由于 r 已在条件中自增,用 s[r-1] 取当前字符的 ASCII 码。
第 42 题(④处)
A. sum / (r - l + 1)B. 1.0 * sum / (r - l + 1)C. 1.0 * sum / (r - l)D. sum * 1.0 / n
参考答案 A
直接用整数除法计算当前段平均值。
第 43 题(⑤处)
A. r + 1, cnt + 1, min(minb, nwb), max(maxb, nwb)B. r, cnt + 1, minb, maxbC. r + 1, cnt, nwb, nwbD. r, cnt, min(minb, nwb), max(maxb, nwb)
参考答案 D
递归处理下一段,起始位置为 r,段数不变,更新最小平均值和最大平均值。
参考答案一览
本次试卷的考点分布较为集中:进制与数据类型(第 1、2 题)、栈与树与图的基础性质(第 4、5、15 题)、递推与容斥(第 6、7 题)、以及 BFS 模拟与指针数组(第 8、11 题)。阅读程序部分均为典型算法模型,完善程序部分一为进制转换、一为递归枚举,建议作为专项训练反复演练。

● 纪丹名师工作室 · 专注初中信息科技教学
本文内容依据网络流传的 2026 CSP-J1 第一轮试题及参考答案整理,仅供教学参考。如与官方答案有出入,请以官方发布为准。