文章

57

粉丝

0

获赞

0

访问

10.5k

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


评分及理由

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

学生给出的基本设计思想是暴力求解法:对于每个A[i],遍历其后的所有A[j]计算乘积并保留最大值。这种思路虽然正确,但并非题目要求的“时间和空间上尽可能高效的算法”。标准答案采用的是O(n)时间复杂度的算法,而学生的算法是O(n²)。由于题目明确要求“尽可能高效”,且暴力法虽然正确但效率较低,因此不能给满分。但考虑到思路本身正确(能解决问题),给予部分分数。扣2分,得2分。

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

学生根据其设计思想给出了C语言代码实现,使用了双层循环暴力求解。代码逻辑与其描述一致,能够正确计算出结果。但存在以下问题:
1. 算法效率低,为O(n²),不符合题目“尽可能高效”的要求。
2. 代码中int max = A[i];的初始化有逻辑缺陷:当A[i]为负数且后面所有乘积都小于A[i]时,max应保留最大乘积值,但初始化为A[i]会导致错误(例如A[i] = -10,后面有乘积-5,但-5 > -10,所以max应更新为-5,但代码中初始max为A[i]即-10,后续比较A[i] * A[j] > max时,-5 > -10成立,max更新为-5,逻辑正确。但若所有乘积都小于A[i](即更小的负数),则max不会更新,保留A[i]本身,这符合“最大乘积”的定义吗?题目要求的是A[i]与A[j]乘积的最大值,当j=i时,乘积为A[i]*A[i],但学生代码中j从i开始,包含了j=i的情况,因此max初始化为A[i](即A[i]*A[i])是合理的,后续会更新为更大的乘积值。所以此处逻辑正确,无需扣分)。
主要扣分点在于算法效率不符合题目要求。代码实现与设计思想一致,功能正确,但效率低下。扣3分,得4分。

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

学生第一次识别结果中写的时间复杂度为O(n),这是错误的;第二次识别结果中修正为O(n²),正确。空间复杂度O(1)正确。由于第一次识别结果有错误,但第二次正确,根据规则“只要其中有一次回答正确则不扣分”,因此不扣分。得2分。

题目总分:2+4+2=8分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发