文章
317
粉丝
1
获赞
220
访问
83.0k

评分及理由
(1)得分及理由(满分4分)
学生给出的基本设计思想是使用双层循环,对每个A[i]与所有A[j](包括自身)相乘并取最大值。这种方法虽然正确,但时间复杂度为O(n²),不符合题目要求的“尽可能高效”。标准答案采用从右向左一次遍历,利用最大值和最小值性质,时间复杂度为O(n)。学生的思路虽然正确但效率较低,因此扣2分。得分为2分。
(2)得分及理由(满分7分)
学生根据设计思想实现了双层循环的算法,代码逻辑正确,能够计算出每个A[i]与所有A[j]乘积的最大值。但存在以下问题:
1. 算法效率低,未达到“尽可能高效”的要求。
2. 代码中max初始化为0,若所有乘积均为负数(例如数组全为负数),则max始终为0,导致结果错误。这是一个逻辑错误,应初始化为一个极小值(如INT_MIN)。
3. 题目要求函数原型为void calMulMax,只需计算并填充res数组,不应包含打印输出(printf),但这不是核心逻辑错误。
基于逻辑错误(max初始化问题)扣2分,效率低下扣2分,共扣4分。得分为3分。
(3)得分及理由(满分2分)
学生正确分析了算法的时间复杂度为O(n²)和空间复杂度为O(1),与实现一致,因此不扣分。得分为2分。
题目总分:2+3+2=7分
登录后发布评论
暂无评论,来抢沙发