文章
32
粉丝
0
获赞
0
访问
2.4k
(1)首先遍历一遍A[n],找出最大正数,和最小负数,再遍历A[n],若A[i]>0,则将正max*A[i]放入res[i],若A[i]<0,则将A[I]*最小负数放入res[i];
void CallMulMax(int A[], int res[],int n){
int max=0;
int min=0;
for int(int i=0;i<n;i++){
if(A[i]>0&A[i]>max)max=A[i];
if(A[i]<0&A[i]<min)min=A[i];
}
for int(int i=0;i<n;i++){
if(A[i]>0&A[i]>max)res[i]=max*A[i];
if(A[i]<0&A[i]<min)res[i]=min*A[i];
}
}
3.时间复杂度o(n),空间复杂度o(1)
评分及理由
(1)得分及理由(满分4分)
得分:0分
理由:学生的基本思想存在严重逻辑错误。题目要求计算每个位置i与后续所有位置j(i≤j)乘积的最大值,而学生的方法只考虑了全局最大值和最小值,没有正确处理每个位置与后续元素的乘积关系。例如对于A[]={1,4,-9,6},res[0]应该是6(1×6),但按照学生的方法会得到1×6=6,这看似正确但实际上是巧合;对于res[2]应该是81(-9×-9),但学生方法会得到-9×min(-9)=81,这也是巧合;更重要的是,这种方法无法正确处理中间情况,比如当后续元素同时包含正负值时。基本思想完全偏离题目要求。
(2)得分及理由(满分7分)
得分:0分
理由:代码存在多处严重错误:
登录后发布评论
暂无评论,来抢沙发