文章

26

粉丝

0

获赞

0

访问

1.3k

头像
2025 年 5 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年12月7日 21:53
阅读数 53

(1)先将j和j+1指向前两个元素(即a_0和a_1),比较j和j+1指向元素是否相同,若相同,则j=j+2,否则a[j]即为只出现一次的元素。

(2)

int find ( a[] , n ) {

     int j=0;

    while ( j=0 && j<n-1 ) {

           if ( a[j]=a[j+1]) {

                  j=j+2;

          else return a[j];

          }

     }

}

 

(3)

时间复杂度为O(n)


评分及理由

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

学生给出的基本设计思想是:从数组开头开始,每次比较相邻的两个元素(即a[j]和a[j+1]),如果相同则跳过这一对(j=j+2),如果不同则a[j]就是目标元素。这个思路与标准答案“顺序遍历坐标为偶数的元素,与后一个元素比较,如果前一个元素与后一个元素不一样,则前一个元素为目标值”在本质上是一致的,都是利用“相同元素一定相邻”的条件,通过成对比较来定位唯一元素。因此思路正确,得3分。

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

学生的代码描述存在多处语法和逻辑错误:
1. 函数声明不完整,缺少参数类型(`int a[]`)。
2. while循环条件 `while ( j=0 && j 3. if条件判断中 `if ( a[j]=a[j+1])` 使用了赋值运算符`=`而非比较运算符`==`,这会将a[j+1]的值赋给a[j],并判断赋值后的值,改变了数组内容且逻辑错误。
4. 代码缩进和括号匹配混乱,`else`语句的放置位置不清晰,但根据上下文意图尚可理解。
5. 未处理边界情况(例如目标元素是最后一个元素时)。标准答案中通过循环后返回A[n-1]来处理,学生代...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发