文章

118

粉丝

0

获赞

0

访问

29.6k

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


评分及理由

(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分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发