文章

126

粉丝

0

获赞

3

访问

21.6k

头像
2010年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年9月8日 18:10
阅读数 11


评分及理由

(1)得分及理由(满分4分)

学生作答中提出的方法是使用辅助数组,通过计算每个元素左移后的新位置(即(i + n - p) % n)来存储元素,然后将辅助数组写回原数组。这种方法在思路上是正确的,但需要注意标准答案中提到了两种方法(逆置法和辅助数组法),而学生使用的是辅助数组法。根据标准答案,辅助数组法也是可接受的正确解法。因此,思路正确,得4分。

(2)得分及理由(满分7分)

学生提供的代码存在逻辑错误:在第二个for循环中,代码写的是R[i] = res[(i - p + n) % n],但这里应该是将原数组R的元素存入辅助数组res的对应位置,而不是反过来。正确的做法应该是先计算辅助数组中每个位置应该存储的原数组元素,即res[i] = R[(i + p) % n]或类似方式(但学生意图是左移p位,所以新位置应为(i - p + n) % n,但赋值方向错误)。具体来说,学生代码中:

  • 第一个循环初始化res为0, unnecessary但不影响逻辑。
  • 第二个循环本意应为将R中的元素放到res的合适位置,但写成了R[i] = res[...],这实际上是用未初始化的res值覆盖了R,逻辑错误。
  • 第三个循环将res写回R,但res中的值并未正确设置。

因此,代码逻辑错误,无法正确实现功能。扣分情况:代码整体思路正确(使用辅助数组),但实现有误。根据标准答案,辅助数组法需要将前p个元素暂存,然后移动后n-p个元素,最后写回,但学生代码没有正确体现这一过程。扣4分(因为核心逻辑错误)。得3分。

(3)得分及理由(满分2分)

学生正确分析了时间复杂度O(n)和空间复杂度O(n),与辅助数组法的复杂度一致。因此得2分。

题目总分:4+3+2=9分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发