文章

73

粉丝

0

获赞

1

访问

6.4k

头像
2013年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年7月13日 21:32
阅读数 69

(1)开辟一个长为 n 的数组。记录 A 中的元素、遍历A获得每一元素的大小,遍历新数组获得大于n/2 的元素的存在。

(2)

int Solution(int *A, int n){
int *B = (int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++) {
B[i] = 0; // 将数组 B 设初值 0
}
for(int i=0;i<n;i++) {
int x = A[i];
B[x]++; // 遍历元素个数
}
for(int i=0, i<n, i++) {
if (B[i]] > n/2){
return i; // 找到主元素。直接返回。
}
}
return -1; // 未找到主元素。
}

(3)三次循环遍历数组。时间复杂度O(n),
开辟了一个大小为n 的新数组B。空间复杂度O(n)。


评分及理由

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

得分:2分

理由:学生的设计思想是使用一个辅助数组来统计每个元素的出现次数,然后遍历辅助数组找到主元素。虽然思路正确,但相比标准答案的摩尔投票法,效率较低,且没有体现出“尽可能高效”的要求。因此扣2分。

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

得分:5分

理由:学生的代码实现了设计思想,但存在以下问题:

  • 语法错误:第三个循环中的条件语句使用了逗号而非分号(for(int i=0, i<n, i++)),应扣1分。
  • 数组访问错误:if (B[i]] > n/2)中多了一个右方括号,应扣1分。
  • 代码逻辑正确但效率较低,未达到“尽可能高效”的要求,因此不额外扣分。

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

得分:2分

理由:学生正确分析了算法的时间复杂度(O(n))和空间复杂度(O(n)),与实现一致,因此不扣分。

题目总分:2+5+2=9分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发