文章
118
粉丝
0
获赞
0
访问
29.6k

评分及理由
(1)得分及理由(满分4分)
得分:2分
理由:学生作答的基本设计思想是:先对数组A进行排序(冒泡排序),同时记录原始位置;排序后,对于每个元素A[i],若其为负数则乘以排序后的最小值(A[0]),若为正数则乘以排序后的最大值(A[n-1]),并将结果存入res的对应原始位置。这个思路在逻辑上可以计算出每个A[i]与后续元素乘积的最大值,但存在以下问题:
1. 题目要求计算A[i]与A[j](i≤j)乘积的最大值,即只考虑i之后的元素(包括自身)。排序后,A[0]和A[n-1]可能是整个数组的最小值和最大值,不一定是A[i]之后子数组的最小值或最大值,因此计算结果可能错误。例如,若A[i]为正数,但最大值出现在i之前,则乘积不满足j≥i的条件。
2. 算法使用了排序,增加了不必要的复杂度。
由于思路部分正确(考虑了正负数分别乘以最小或最大值),但核心逻辑有缺陷,扣2分。
(2)得分及理由(满分7分)
得分:3分
理由:代码实现了上述思路,但存在多处逻辑错误:
1. 排序后,使用A[0]和A[n-1]作为最小值和最大值,未考虑i之后子数组的范围,导致结果错误。
2. 冒泡排序的内层循环条件为j < n - i,但初始j=1,比较A[j-1] > A[j],这是正确的冒泡排序逻辑,但排序改变了原数组A,破坏了原始数据,影响后续计算。
3. 最后输出cout << res[i]是多余的,题目要求只是填充res数组,不应输出。
4. 代码中动态分配了数组R,但未释放内存,存在内存泄漏。
由于代码基本实现了所述思路,但核心逻辑错误,扣4分。给予3分是因为代码结构完整,且排序和位置记录部分正确。
(3)得分及理由(满分2分)
得分:1分
理由:学生正确分析了时间复杂度为O(n²)(冒泡排序)和空间复杂度为O(n)(额外数组R),但未指出算法本身的逻辑错误。由于复杂度分析基于现有代码是正确的,但算法整体不正确,扣1分。
题目总分:2+3+1=6分
登录后发布评论
暂无评论,来抢沙发