Initial commit: C++ courseware

This commit is contained in:
xiaolinquan committed 2026-11-05 22:51:02 +08:00
commit 4a4ee7c287
1789 files changed
+373489

No files matched your search

@@ -0,0 +1,61 @@
### **2024 CCF 非专业级别软件能力认证第一轮 (CSP-J1) 参考答案**
#### **一、单项选择题**
1. **C**
2. **A** (原式为 $(12_{10} - 10_{10}) * 13_{10} - 13_{10} = 2 * 13 - 13 = 13$)
3. **B** (A选2人,BC各1人: C(4,2)×C(3,1)×C(3,1)=54; B选2人,AC各1人: C(4,1)×C(3,2)×C(3,1)=36; C选2人,AB各1人: C(4,1)×C(3,1)×C(3,2)=36。总计54+36+36=126)
4. **D** (格雷码的特性是相邻两个编码只有一位不同)
5. **D** (1MB = 1024 * 1024 Bytes = 1024 * 1024 * 8 bits = 8388608 bits)
6. **C** (`struct` 是构造数据类型,不是基本数据类型)
7. **D** (`repeat-until` 是 Pascal 等语言的语法)
8. **B** (字符'a'的ASCII码是97,97 + 13 = 110,110对应的字符是'n')
9. **B** (2⁹ = 512, 2¹⁰ = 1024。所以最多比较10次)
10. **A** (Notepad是记事本应用软件)
11. **B** (图论基本定理:每条边连接两个顶点,为总度数贡献2)
12. **A** (通过前序和中序遍历结果可以唯一确定一棵二叉树,从而得到其后序遍历)
13. **D** (栈的特性是后进先出,可逐项模拟验证,D项无法实现)
14. **A** (捆绑法:将3个女生视为一个整体,与5个男生进行全排列,有 `P(6,6)` 种方法。3个女生内部也有 `P(3,3)` 种排列。总数为 `6! * 3! = 720 * 6 = 4320`)
15. **B**
---
#### **二、阅读程序**
**(1)**
16. **√** (10以内的质数是2, 3, 5, 7,共4个,和为17)
17. **×** (判断逻辑依然正确,20以内的质数有8个,输出不会变为6)
18. **√**
19. **B** (1到50的质数之和为328)
20. **A** (修改后,任何大于1的数 `p` 在循环到 `i=p` 时都会因 `p % p == 0` 而被误判为非质数,导致结果错误)
**(2)**
21. **√** (模拟DP过程:dp[1]=10, dp[2]=min(10,0)+15=15, dp[3]=min(15,10)+20=30。返回min(dp[3], dp[2])即min(30,15)=15)
22. **×** (不会产生编译错误,但可能会因访问数组负数下标而产生运行时错误)
23. **×** (程序计算的是到达楼顶的最小花费路径,不一定是单个最小元素)
24. **A** (模拟DP过程,最终返回min(dp[10], dp[9]) = min(6, 104) = 6)
25. **B** (模拟DP过程,最终返回min(dp[7], dp[6]) = min(45, 30) = 30)
26. **A** (修改后模拟计算:dp[1]=5, dp[2]=dp[1]+cost[0]=5+5=10, dp[3]=dp[2]+cost[1]=10+10=20。返回min(20,10)=10)
**(3)**
27. **×** (`customFunction(2, 3)` 返回 8。题目问的是函数的返回值,而不是最终输出。最终输出 `pow(8, 2)` 是64)
28. **√** (b为负数,`b-1` 永远不会等于0,导致无限递归)
29. **√** (b越大,递归深度越大,运行时间越长)
30. **B** (该函数计算 `a * (b + 1)`,即 `5 * (4 + 1) = 25`)
31. **C** (`customFunction(3, 3)` 返回 `3 * (3 + 1) = 12`。程序最终输出 `pow(12, 2)` 即 144)
32. **D** (修改后递归计算:f(3,3) = 3+f(2,2) = 3+2+f(1,1) = 3+2+1+f(0,0) = 3+2+1+0=6。最终输出`pow(6,2)`即36)
---
#### **三、完善程序**
**(1) 判断平方数**
33. **A** (从1开始检查)
34. **B** (循环的上界是原数的平方根,没有必要超过它)
35. **C** (判断`i`的平方是否等于`num`)
36. **C** (如果找到,说明是平方数,返回`true`)
37. **D** (如果循环结束都没找到,说明不是平方数,返回`false`)
**(2) 汉诺塔问题**
38. **B** (递归的边界条件:当只剩一个盘子时,直接移动)
39. **B** (对应 `move(src, tgt)`)
40. **B** (第一步:将 `i-1` 个盘子从 `src` 经由 `tgt` 移到 `tmp`)
41. **B** (第三步的盘子数量为 `i-1`)
42. **B** (第三步:将 `i-1` 个盘子从 `tmp` 经由 `src` 移到 `tgt`)