夜雨聆风学习资料网

ARTICLE · 1039354

2026 CSP-J 初赛全真试题+满分精析

2026 CSP-J 初赛全真试题+满分精析
2026年CSP-J初赛已圆满结束!本文为全网精校完整版试题+逐题独家解析,无乱码、无错题、无遗漏,适配所有信奥入门学员复盘估分、查漏补缺。

📋 试卷信息

题型分布:单项选择15题+阅读程序3大题+完善程序2大题
---

一、单项选择题(共15题,每题2分,共30分)

第1题

下列C++ 数据类型中,能够精确存储 \(10^{18}+1\) 这个整数的是( )。
A. floatB. long longC. doubleD. int
✅ 答案:B
💡 解析:
  1. int(32位):取值范围仅 (-2.14\times10^9 \sim 2.14\times10^9),无法存储超大整数;
  2. long long(64位):最大值约 (9.22\times10^{18}),可精确存储 (10^{18}+1);
  3. float/double:浮点型有效数字有限,仅支持15~17位精确数字,无法精确存储19位超大整数。

第2题

十六进制数2F5 转换为八进制数是( )。
A. 1364B. 1635C. 1405D. 1365
✅ 答案:D
💡 解析:二进制中转法(信奥必考)
  1. 十六进制转4位二进制:2→0010、F→1111、5→0101,拼接得:001011110101
  2. 从低位向高位每3位分组:001 011 110 101
  3. 分组转八进制:1、3、6、5,最终结果为 1365。

第3题

执行下列C++ 代码,输出是( )。
int a = 7, b = 3; std::cout << a / b * b + a % b;
A. 9B. 10C. 7D. 6
✅ 答案:C
💡 解析:
  1. C++整数整除向下取整:7 / 3 = 2,2 * 3 = 6
  2. 取模运算:7 % 3 = 1
  3. 最终计算:6 + 1 = 7
✨ 核心公式:a = (a / b) × b + (a % b)(带余除法恒成立)

第4题

初始栈为空,将1, 2, 3, 4 依次入栈,入栈过程中允许随时出栈。下列出栈序列中不可能出现的是( )。
A. 2, 4, 3, 1B. 1, 2, 3, 4C. 3, 1, 2, 4D. 1, 4, 3, 2
✅ 答案:C
💡 解析:
若首个出栈元素为3,说明1、2、3已全部入栈,栈内顺序为:栈顶3→2→栈底1。
根据栈后进先出规则,后续只能先出2、再出1,不可能出现1先于2出栈。

第5题

一棵有100 个结点的完全二叉树,其叶子结点个数是( )。
A. 49B. 50C. 64D. 51
✅ 答案:B
💡 解析:完全二叉树核心结论
最后一个分支结点编号= ⌊总节点数/2⌋ = ⌊100/2⌋ = 50
即:1~50号为分支结点,51~100号为叶子结点,叶子总数 = 100 - 50 = 50个。

第6题

执行下列代码后s 的值是( )。
int s = 0; for (int i = 1; i <= 100; i++) if (i % 3 == 0 || i % 5 == 0) s += i;
A. 3048B. 2733C. 2318D. 2418
✅ 答案:D
💡 解析:容斥原理
总和= 3的倍数和 + 5的倍数和 - 15公倍数和(避免重复计算)
1. 3的倍数和:3×(1+2+…+33) = 1683
2. 5的倍数和:5×(1+2+…+20) = 1050
3. 15公倍数和:15×(1+2+…+6) = 315
最终结果:1683+1050-315 = 2418

第7题

上楼梯每步可上1 级、2 级或 3 级,从地面走到第 8 级台阶共有多少种不同走法( )。
A. 44B. 121C. 149D. 81
✅ 答案:D
💡 解析:递推DP模型
递推公式:f(n) = f(n-1)+f(n-2)+f(n-3)
初始边界:f(0)=1、f(1)=1、f(2)=2
依次推导:f(3)=4、f(4)=7、f(5)=13、f(6)=24、f(7)=44、f(8)=81

第8题

5×5 网格 BFS 遍历(上、下、左、右顺序),终点E第一次入队时,累计入队格子数(含S、E)为( )。
A. 15B. 12C. 14D. 13
✅ 答案:C
💡 解析:
严格按照题目指定方向顺序逐层BFS扩展,模拟队列入队规则,终点首次入队时,总计入队格子数为 14个。

第9题

满足1 ≤ n ≤ 100 且 gcd(n, 60) = 6 的正整数 n 共有多少个( )。
A. 8B. 6C. 4D. 5
✅ 答案:B
💡 解析:数论互质原理
1. 设 n=6k,由gcd(6k,60)=6,可得 gcd(k,10)=1
2. 约束范围:1≤6k≤100 → 1≤k≤16
3. 筛选1~16中与10互质的数:1、3、7、9、11、13,共6个

第10题

硬币面值1元、4元、6元(数量不限),凑出9元最少需要多少枚硬币( )。
A. 3B. 4C. 5D. 2
✅ 答案:A
💡 解析:贪心最优解
1. 最优方案:4+4+1 = 9(共3枚)
2. 次优方案:6+1+1+1 = 9(共4枚)
最少需要3枚。

第11题

执行代码,最终输出为()。
int a[5] = {1, 3, 5, 7, 9}; int *p = a + 2; *(p - 1) = p[0] + p[2]; p[1] = *(a + 1) - a[0]; cout << a[1] << "," << a[3];
A. 14,13B. 8,13C. 14,7D. 14,2
✅ 答案:A
💡 解析:指针运算
  1. p指向a[2]=5,p-1指向a[1]
  2. a[1] = a[2]+a[4] = 5+9 = 14
  3. a[3] = a[1]-a[0] = 14-1 = 13
最终输出:14,13

第12题

含1000个互不相同元素的升序数组,二分查找最坏需要比较多少次( )。
A. 500B. 9C. 11D. 10
✅ 答案:D
💡 解析:二分查找复杂度
最坏比较次数公式:⌊log₂n⌋+1
log₂1000≈9.96,计算得 9+1 = 10次

第13题

数组前缀和满足s[i] = 3i² + i,求 a[10] 的值( )。
A. 252B. 310C. 58D. 61
✅ 答案:C
💡 解析:前缀和差分性质
a[n] = s[n]-s[n-1]
s[10]=3×10²+10=310,s[9]=3×9²+9=252
a[10]=310-252 = 58

第14题

数轴点:1,3,4,7,10,15,20,选一点P使距离和最小,最小距离和为( )。
A. 37B. 42C. 40D. 38
✅ 答案:A
💡 解析:中位数定理
奇数个点,距离和最小点为中位数(第4个点:7)
总距离:6+4+3+0+3+8+13 = 37

第15题

无向图10个顶点,4个顶点度为3,其余顶点度为4,求边数( )。
A. 36B. 18C. 17D. 20
✅ 答案:B
💡 解析:图论握手定理
总度数= 2 × 边数
总度数= 4×3 + 6×4 = 36,边数 = 36÷2 = 18

二、阅读程序(共3大题,40分)

阅读程序1:位运算与二进制统计

代码
#include
using namespace std;
int main() {
int n; cin >> n;
int x = 1, y = 1;
while (n > 0) {
if (n % 2 == 0) ++x;
else { ++x; ++y; }
n = n / 2;
}
cout << x << ' ' << y << endl;
return 0;
}
核心逻辑:x统计二进制总位数、y统计二进制中1的个数(初始值均+1)
16. 输入3,输出3 3 → 正确
17. 删除第11行++x,输出两数一定相等 → 错误
18. 非负输入,第一个数一定不小于第二个数 → 正确
19. while(n>0)改为while(n>=0) → 死循环
20. 输入6,输出 → 4 3
21. 0~2³¹-1中y=2的数字个数 → 31个

阅读程序2:字符串高精度加法模拟

核心考点:逐位加法、不自动去除前导零、进位规则
22. 输入123 456,输出0579 → 正确
23. 输入无前置零,输出一定无前置零 → 错误
24. 取消进位判断,结果一定更小 → 错误
25. 输入12345 678,输出 → 013023
26. 修改进位判断后输入95 15,输出 → 01010
27. n位数相加和小于10ⁿ,输出特征 → 长度n+1,首位为0

阅读程序3:前缀素数深搜回溯

核心规则:输出的多位数,删除末位后仍为质数
28. 输入10输出10行 → 错误(实际9行)
29. n≤5,输出一定包含5 → 正确
30. n>10仅枚举奇数,结果不变 → 正确
31. 输入24,第三行输出 → 29
32. 正确结论:≥10的输出数,删末位后仍为质数
33. 输入200,输出总行数 → 14行
---

三、完善程序(共2大题,30分)

第一题:高精度进制转换

34. ① 填:D b[j] * m(高位权重计算)
35. ② 填:B x(存储当前最低位)
36. ③ 填:D b[j] / n(高精度除法求商)
37. ④ 填:B b[j] % n(保留当前位余数)
38. ⑤ 填:C len > 1 && b[len - 1] == 0(去除前导零)

第二题:十六进制字符串平衡分割(回溯搜索)

题目功能:分割字符串,使各段均值极差(最大值-最小值)最小
① 字符转数值:B c >= '0' && c <= '9' ? c - '0' : c - 'A' + 10
② 枚举右端点:D r = l; r <= n; ++r
③ 计算段平均值:C 1.0 * sum / (r - l + 1)
④ 递归参数:A r + 1, cnt + 1, min(mnb, nwb), max(mxb, nwb)
⑤ 主函数入口:D 1, 0, 1e100, -1e100

相关学习资料