文章

323

粉丝

6

获赞

5

访问

119.6k

头像
2025年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年12月4日 18:32
阅读数 165


评分及理由

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

得分:2分

理由:学生的基本设计思想与标准答案有差异。标准答案的核心是维护右侧子数组的全局最大值和最小值,然后根据当前元素的正负性选择与之相乘的值。学生的思路是维护“右侧的最大正数和最小负数”,这是一个不完整的逻辑。因为当右侧子数组中同时存在正数和负数时,一个负数乘以右侧的最小负数(即最负的数)可能得到最大乘积(正数),但学生只考虑了“最小负数”,而忽略了负数也可能需要乘以右侧的最大值(如果右侧最大值是正数,乘积为负,可能不是最大;但如果右侧最大值是负数且绝对值较小,乘积可能更大)。此外,对于正数元素,学生只考虑乘以“最大正数”,但若右侧没有正数(全为负数或零),则最大正数不存在(初始值可能不合适),此时正数乘以右侧的负数可能得到更小的乘积,而实际上正数应该乘以右侧的最大值(可能是负数)才能得到最大乘积?这里逻辑有误。因此,设计思想存在缺陷,扣2分。

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

得分:3分

理由:代码实现基于有缺陷的设计思想,因此存在逻辑错误。具体分析:

  • 初始化:max_pos = -1(第一次识别)或 max - pos = 1(第二次识别,疑似识别错误,应为max_pos = 1?但逻辑仍错)。如果右侧没有正数,max_pos保持初始值,可能导致错误结果(例如,正数乘以-1或1可能不是最大乘积)。
  • 对于负数元素,只乘以min_neg(最小负数),但若右侧有正数,负数乘以正数得到负数,而乘以最小负数可能得到正数,这可能是正确的,但若右侧正数很大,负数乘以正数得到更小的负数,确实不是最大乘积,所以这里可能碰巧正确,但整体逻辑不严谨。
  • 对于非负数(包括0),乘以max_pos,但如果右侧没有正数,max_pos为初始值,可能导致错误(例如,A[i]=5,右侧全为负数,最大值为-1,乘积应为-5,但按学生代码可能用max_pos=1得到5,错误)。
  • 代码中变量名有识别错误(如max - pos),但根据上下文判断为误写,不扣分。
  • 由于逻辑错误较多,扣4分。

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

得分:2分

理由:学生正确给出了时间复杂度O(n)和空间复杂度O(1),与算法实际执行情况一致(尽管算法逻辑有误,但复杂度分析正确),因此给满分。

题目总分:2+3+2=7分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发