文章

281

粉丝

40

获赞

2

访问

23.8k

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

void CallMulMax(int A[], int res[],int n){

for(int i = 0; i< A.size(); i++){
int max_val = 0;
int imax_val = 0;

if(A.[i] > 0 && A[i] > max_val){
max_val = A.[i];
res[i] = A.[i]*max_val;
}

if(A.[i] < 0 && abs(A[i]) > abs(imax_val)){
imax_val = A.[i];
res[i] = A.[i]*imax_val;
}

if(A.[i] = 0)res[i] = 0;

}

}

时间复杂度是O(n),空间复杂度是O(1)

算法思想:
当A[i]是大于0的,那么res[i]的最大值 = A[i]乘以A[0]~A[i]中的正数最大值
当A[i]是小于0的,那么res[i]的最大值 = A[i]乘以A[0]~A[i]中的负数最小值
当A[i]是等于0的,那么res[i]乘以任何数的结果都是0
所以在确定res[i]的最值时,只需维护每一轮中的正负数绝对值最大值即可,再更新res[i]的最值

 


评分及理由

(1)得分及理由(满分4分)

得分:0分

理由:学生给出的算法思想存在根本性错误。题目要求计算A[i]与A[j](i≤j≤n-1)乘积的最大值,即对于每个位置i,需要找到从i到末尾的最大乘积。但学生的思路是寻找A[i]与A[0]~A[i](即i之前)的元素乘积的最大值,这与题目要求完全相反。此外,学生没有理解需要同时维护最大值和最小值来处理负数相乘的情况,思路描述不完整且方向错误。

(2)得分及理由(满分7分)

得分:0分

理由:代码存在多处严重错误:
1. 语法错误:使用`A.size()`(应为n)、`A.[i]`(应为A[i])等错误语法。
2. 逻辑错误:循环内每次重置max_val和imax_val为0,无法正确记录历史极值;比较对象错误(应为i到n-1而非0到i);未考虑A[i]与后续元素乘积的所有情况(如正数乘负数最小值等)。
3. 功能错误:代码完全无法实现题目...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发