### **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`)