文章
26
粉丝
0
获赞
0
访问
1.3k
(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
4. 代码缩进和括号匹配混乱,`else`语句的放置位置不清晰,但根据上下文意图尚可理解。
5. 未处理边界情况(例如目标元素是最后一个元素时)。标准答案中通过循环后返回A[n-1]来处理,学生代...
登录后发布评论
暂无评论,来抢沙发