文章
212
粉丝
0
获赞
0
访问
28.5k

评分及理由
(1)得分及理由(满分4分)
学生给出的算法思想是:对每个A[i],遍历其后的所有A[j](j>i),计算乘积并保留最大值,最终存入res[i]。这一思路能够正确计算出题目要求的结果(即对于每个i,找到j≥i时A[i]*A[j]的最大值)。虽然算法的时间复杂度不是最优(标准答案给出了O(n)的解法),但题目要求“尽可能高效”,并未强制要求线性复杂度,且该思路正确实现了功能,因此不扣分。得4分。
(2)得分及理由(满分7分)
学生提供的代码基本实现了其设计思想,但存在一个逻辑错误:内层循环的起始条件是j = i + 1,这导致当j = i(即自身相乘)的情况被忽略。根据题目要求“0≤i≤j≤n-1”,j可以等于i,因此算法漏掉了A[i]*A[i]这一乘积。例如,对于数组A[]={1, 4, -9, 6},按照学生的算法,res[2]将不是81(因为-9*-9=81被漏掉),而是-9*6=-54,结果错误。这是一个逻辑错误,需要扣分。此外,函数声明返回类型为void,但代码中写了return 0;,这在C/C++中会导致编译错误或警告,属于语法错误,但考虑到可能是识别误差,且核心逻辑错误已扣分,此项不再额外扣分。根据错误严重程度,扣3分。得4分。
(3)得分及理由(满分2分)
学生正确分析了其算法的时间复杂度为O(n²),空间复杂度为O(1)。这与代码实现相符,且分析正确。得2分。
题目总分:4+4+2=10分
登录后发布评论
暂无评论,来抢沙发