CSP-J 初赛模拟卷(第 18 套)
参考答案与解析
--- #### **一、单项选择题** **答案速查** | 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | C | C | B | C | B | D | B | A | | 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | C | D | B | C | C | C | A | **逐题解析** ##### 第1题 **答案:** C **解析:** 按位权展开,$(24)_x=2x+4=18$,解得 $x=7$,且各位数字均小于进制基数 $7$。 ##### 第2题 **答案:** C **解析:** 域名中的 `gov` 表示政府机构,`.cn` 表示中国的国家顶级域名,因此该网站属于政府机构网站。 ##### 第3题 **答案:** B **解析:** 操作系统直接负责处理器调度、内存管理和设备管理等工作,与计算机硬件的联系最密切。 ##### 第4题 **答案:** C **解析:** 第一次判断 `while(i++)` 时先使用旧值 $1$,随后 `i=2`,执行 `s+=2`;第二次判断后 `i=3`,满足 `i%3==0` 而退出,最终 `s=2`。 ##### 第5题 **答案:** B **解析:** 满足条件的无序组合为 $(2,8,9)$、$(3,7,9)$、$(4,6,9)$、$(4,7,8)$、$(5,6,8)$,共 $5$ 种。 ##### 第6题 **答案:** D **解析:** 三人的选课方案相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。 ##### 第7题 **答案:** B **解析:** 根为 `A`;其左子树由 `B、D` 构成,后序为 `DB`;右子树由 `C、E` 构成,后序为 `EC`。合并得到 `DBECA`。 ##### 第8题 **答案:** A **解析:** 引导固件需要在断电后仍能保存,通常存放在 ROM 或具有相应非易失特性的存储器中,本题选择 ROM。 ##### 第9题 **答案:** C **解析:** 表达式的最外层运算是减法,左操作数为 `a+b*c`,右操作数为 `d+e`。分别转为前缀形式后,得到 `-+a*bc+de`。 ##### 第10题 **答案:** D **解析:** 灯的状态每 $6$ 次按键循环一次。$49\bmod6=1$,对应白灯亮;$100\bmod6=4$,对应灯灭。 ##### 第11题 **答案:** B **解析:** $704=2^6\times11$,$2048=2^{11}$,因此最小公倍数为 $2^{11}\times11=22528$。 ##### 第12题 **答案:** C **解析:** 逻辑或仅在两个操作数都为 $0$ 时结果为 $0$;只要有一个为 $1$,结果就为 $1$。 ##### 第13题 **答案:** C **解析:** 代入 C,可得到三组队友分别为“小明与小红”“小刚与琳达”“小伟与小丽”,每组都不是夫妻,且满足小刚与小伟的妻子、琳达的丈夫与小丽同组的条件。 ##### 第14题 **答案:** C **解析:** 先让用时 $1$、$2$ 的两人过桥,用时 $1$ 的人返回;再让用时 $5$、$10$ 的两人过桥,用时 $2$ 的人返回;最后前两人一起过桥。总时间为 $2+1+10+2+2=17$ 分钟。 ##### 第15题 **答案:** A **解析:** 姚期智于 2000 年获得图灵奖,以表彰其在计算理论等领域作出的突出贡献。 #### **二、阅读程序** ##### 程序(1) **程序分析:** `num[i]` 表示以第 `i` 个元素结尾的最长严格递增子序列长度。程序尝试由前面更小的元素转移,最后取所有 `num[i]` 的最大值。 **答案速查** | 题号 | 16 | 17 | 18 | 19 | 20 | 21 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | × | √ | × | √ | D | B | ###### 第16题 **答案:** ×(错误) **解析:** 算法只比较元素大小,负数同样可以参与比较,不会仅因输入为负数而出错。 ###### 第17题 **答案:** √(正确) **解析:** 长度为 $n$ 的序列,其子序列最多包含 $n$ 个元素,因此 `ans<=n`。 ###### 第18题 **答案:** ×(错误) **解析:** 例如序列 `1,2` 中,初始两项的 `num` 都为 $1$;必须允许相等时更新,才能把第二项改为 $2$。改成严格大于后会漏掉这次转移。 ###### 第19题 **答案:** √(正确) **解析:** 当 `num[i]==ans` 时,无论是否再次赋值,`ans` 的数值都不变,因此修改不影响最大值。 ###### 第20题 **答案:** D **解析:** 所有数相等时,不存在严格递增的相邻选取关系,最长严格递增子序列只能取一个元素,输出 $1$。 ###### 第21题 **答案:** B **解析:** 样例的动态规划长度依次为 $1,1,2,3,4,3,2,4,5,3$,最大值为 $5$;例如可取 `2,5,7,10,15`。 ##### 程序(2) **程序分析:** 程序模拟长除法,`b` 保存商的各位,`a` 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。 **答案速查** | 题号 | 22 | 23 | 24 | 25 | 26 | 27 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | × | √ | √ | × | C | D | ###### 第22题 **答案:** ×(错误) **解析:** 当 `n==m` 且 `m!=0` 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。 ###### 第23题 **答案:** √(正确) **解析:** 程序包含整数除法和取模,除数 `m` 必须非零。 ###### 第24题 **答案:** √(正确) **解析:** 循环可因检测到重复待除数而执行 `break`,也可因余数为零而使 `do...while` 条件不成立,共有两种退出途径。 ###### 第25题 **答案:** ×(错误) **解析:** 例如输入 `1 3` 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。 ###### 第26题 **答案:** C **解析:** $11/8=1.375$,是有限小数,不需循环节括号,因此输出 `1.375`。 ###### 第27题 **答案:** D **解析:** 输入为 `5 13`,$5/13=0.\overline{384615}$,输出为 `0.(384615)`,对应 D。 ##### 程序(3) **程序分析:** DFS 从每个顶点出发枚举不重复顶点的路径,回溯时撤销访问标记,`ans` 记录路径权值之和的最大值,即最长简单路径长度。 **答案速查** | 题号 | 28 | 29 | 30 | 31 | 32 | 33 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | √ | √ | D | B | B | C | ###### 第28题 **答案:** √(正确) **解析:** 简单无向完全图的所有非对角邻接项都会被输入边覆盖;对角项不会被用于访问已标记的当前顶点,因此可省略这段初始化。 ###### 第29题 **答案:** √(正确) **解析:** 所有起点仍会被完整枚举,改变枚举先后不影响最终取到的最大值。 ###### 第30题 **答案:** D **解析:** 图中两个连通分量各只有一条权值为 $1$ 的边,最长简单路径长度为 $1$。 ###### 第31题 **答案:** B **解析:** 四个顶点的完全图中,每条边权值为 $1$,简单路径至多经过 $3$ 条边,且可以达到,因此输出 $3$。 ###### 第32题 **答案:** B **解析:** 顶点 $4$ 孤立,三角形中最长简单路径可取 $2\to3\to1$,长度为 $20+30=50$。 ###### 第33题 **答案:** C **解析:** 取路径 $3\to1\to4\to2$,长度为 $50+40+60=150$;枚举其他简单路径也不能得到更大值。 #### **三、完善程序** ##### 程序(1) **程序分析:** 程序将大整数的十进制各位逆序存入数组,使下标 $1$ 对应个位;按位相加并向高位进位,最后从最高位向最低位输出。 **答案速查** | 题号 | 34 | 35 | 36 | 37 | 38 | | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | B | C | A | A | C | ###### 第34题 **答案:** B(`a.num[a.len-i]=c[i]-'0'`) **解析:** 字符串第 `i` 个字符对应从低位计数的 `a.len-i` 位,减去字符 `0` 后得到数字值。 ###### 第35题 **答案:** C(`b.num[b.len-i]=d[i]-'0'`) **解析:** 同理,将第二个字符串第 `i` 个字符存入 `b.num[b.len-i]`,并减去字符 `0`。 ###### 第36题 **答案:** A(`(a.num[i]+b.num[i])`) **解析:** 当前位应加上两个加数相同位置的数字,即 `a.num[i]+b.num[i]`,同时保留前一位已经产生的进位。 ###### 第37题 **答案:** A(`w.num[i]/10`) **解析:** 当前位总和除以 $10$ 得到进位值,应把 `w.num[i]/10` 加入下一位。 ###### 第38题 **答案:** C(`w.num[w.len+1]!=0`) **解析:** 若原最高位之后仍有非零进位,即 `w.num[w.len+1]!=0`,结果长度需增加一位。 ##### 程序(2) **程序分析:** 程序从指定格子出发,按马的八种走法回溯。移动前同时检查是否在棋盘内、是否访问过;`tot` 记录已移动的步数,访问满整个棋盘时增加方案数。 **答案速查** | 题号 | 39 | 40 | 41 | 42 | 43 | | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | C | B | D | A | D | ###### 第39题 **答案:** C(`x>=0 && y>=0 && x=0 && y>=0 && x