Files

61 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### **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`)