文章

32

粉丝

0

获赞

0

访问

2.4k

头像
2025年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年10月25日 20:57
阅读数 162

(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分

理由:代码存在多处严重错误:

  • 语法错误:for循环中使用了"for int(int i=0;i<n;i++)",正确的应该是"for(int i=0;i<n;i++)"
  • 逻辑错误:第一个循环中,如果数组中没有正数,max保持为0;如果没有负数,min保持为0,这会导致后续计算错误
  • 逻辑错误:第二个循环中,只考虑了A[i]>0和A[i]<0的情况,没有考虑A[i]=0的情况
  • 逻辑错误:当A[i]为正数时,用max*A[i]计算,但max可能是0,这显然错误
  • 逻辑错误:没有正确处理每个位置与后续元素的乘积关系,算法思想本身就是...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发