文章

273

粉丝

0

获赞

1

访问

57.3k

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


评分及理由

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

学生给出的算法思想是:第一遍循环找到整个数组的最大值和最小值,第二遍循环对每个A[i]计算Max*A[i]和Min*A[i]的最大值作为res[i]。这个思路与标准答案不同,标准答案是从右向左遍历并动态维护从i到n-1的最大值和最小值,然后根据A[i]的正负选择乘最大值或最小值。学生的思路虽然也能得到结果,但存在逻辑错误:对于每个A[i],需要的是与A[j](j≥i)的乘积最大值,而学生的做法使用了整个数组的最大值和最小值,这可能导致错误(例如A[i]为负数时,应该乘子数组的最小值,但学生可能乘了整个数组的最大值,导致结果不是子数组范围内的最大乘积)。因此,该算法思想不完全正确。但考虑到学生可能意图是简化处理,且部分情况下可能正确,但严格来说不符合题目要求,扣2分。得2分。

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

学生代码实现基于上述思想,但存在以下问题:
1. 第一遍循环中,学生从后向前遍历,但维护的Max和Min是整个数组的最大值和最小值,而不是从i到n-1的最大值和最小值。这导致第二遍循环中,res[i]的计算可能错误,因为对于每个i,应该使用子数组A[i:n-1]的最大值和最小值,而不是整个数组的。
2. 代码中使用了宏定义INF,但初始值设置可能不准确(例如-INF可能不是最小整数值),但这不是主要扣分点。
3. 关键逻辑错误:没有根据A[i]的正负选择乘最大值或最小值,而是直接取Max*A[i]和Min*A[i]的最大值,这不符合题目要求(例如A[i]为负数时,应乘子数组的最小值,但学生可能乘了Max,导致结果偏小或错误)。
因此,代码逻辑错误明显,扣4分。得3分。

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

学生正确分析了时间复杂度和空间复杂度,均为O(n)和O(1),与标准答案一致。得2分。

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发