文章
180
粉丝
0
获赞
0
访问
17.6k

评分及理由
(1)得分及理由(满分4分)
得分:0分
理由:学生的基本设计思想存在逻辑错误。题目要求对每个A[i],需要找到j≥i时的A[j]使得A[i]*A[j]最大。学生采用先对整个数组排序的方法,这会破坏原始索引关系,导致无法满足j≥i的条件。例如对于A[]={1,4,-9,6},排序后得到[-9,1,4,6],按照学生的算法,当i=0(对应原始A[2]=-9)时,res[0]=A[0]*A[0]=81是正确的,但当i=1(对应原始A[0]=1)时,res[1]=A[3]*A[1]=6*1=6,但正确答案应该是24(1*4=4, 1*6=6, 1*(-9)=-9中的最大值是6?这里需要验证:实际上原始数组中A[0]=1,j≥0时乘积最大值应该是1*6=6,而学生给出的是6,但标准答案是24?重新审题发现题目给出的例子res[]={6,24,81,36},其中res[0]=6对应A[0]=1,应该是1*6=6,学生这里计算正确,但整体思路仍然错误,因为排序破坏了原始位置关系,无法保证j≥i的条件)。
(2)得分及理由(满分7分)
得分:0分
理由:代码实现存在严重逻辑错误:
1. QSort函数实现有误:partition函数中交换逻辑错误,会导致数组元素丢失;递归调用QSort时参数错误,应该是QSort(A, left, pivot-1)和QSort(A, pivot+1, right)
2. 主要逻辑错误:先对整个数组排序会破坏原始索引关系,无法满足题目要求的"0≤i≤j≤n-1"条件
3. 具体计算错误:对于负数元素,学生用A[0]*A[i],但A[0]是最小值,当两个负数相乘可能得到正数最大值,这个思路部分正确,但由于排序破坏索引关系,仍然错误
(3)得分及理由(满分2分)
得分:1分
理由:学生正确分析了所给算法的时间复杂度O(n log n)和空间复杂度O(n),但由于算法本身是错误的,所以只给1分。
题目总分:0+0+1=1分
登录后发布评论
暂无评论,来抢沙发