文章

125

粉丝

0

获赞

1

访问

21.4k

头像
2025 年 6 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年8月10日 17:58
阅读数 120

(1)设置变量im,jm,m来表示A[i] - A[j]的值,遍历数组A,如果在i处找到了峰,那就检查i右边是否存在谷,如果找到啦就比对大小,A[i] - A[j]比m大则更新对应的值,在初始处设置变量flag,表明是否存在峰谷对,如果flag=0则不存在,找到了就把flag置为1,当flag=0时就返回0,flag=1时就打印(im,jm)的值

(2)int solution(int *A){

int i,j,im=0,jm=0,m=-99999,flag=0; //初始化变量,其中初始m是一个极小负值,能保证找到的第一个峰值对肯定大于m

for(i=2;i<n-1;i++){

if(A[i] > A[i-1]&A[i] > A[i+1]){   //找到了一个峰

for(j=i+1;j<n-1;j++) //在峰右边找谷

if(A[j] < A[j-1]&A[j] < A[j+1]){  //找到了谷

if(A[i] - A[j]>m){if(flag==0){flag=1;}//存在这样的峰谷对

im=i;jm=j;m=A[i] - A[j]; //找到A[i] - A[j]更大,更新为更大处的i和j的值,并更新最大值

}}}}

if(flag==0){return 0;} //不存在这样的峰谷对,返回0

else{

printf(("%d","%d"),&im,&jm);打印最大值对应的i和j

return;

}

}

(3)时间复杂度O(n^2),空间复杂度O(1)


评分及理由

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

得分:3分

理由:学生的设计思想基本正确,能够描述出如何寻找峰谷对并计算最大差值。但未提及如何高效地找到峰后的最小谷值,而是采用遍历峰后所有谷的方法,效率较低。因此扣1分。

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

得分:5分

理由:代码实现了峰谷对的查找和最大差值的计算,但存在以下问题:

  • 代码中未定义变量n,导致无法编译(逻辑错误,扣1分)。
  • printf语句格式错误,且未正确返回最大值...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发