文章

78

粉丝

0

获赞

0

访问

3.7k

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

(1)算法思想:用一个长度为n+1的数组B记录A内元素的个数,然后遍历B数组,找到元素大于(n/2)的索引,此索引即为A的主元素,否则输出-1;

步骤:1.声明一个长度为n+1的B数组;

2.遍历A数组,使B数组记录A中元素的个数;

3.遍历B数组,找到B中大于n/2的元素,输出其索引。如果小于n/2,输出-1;

(2)

void find_main_elem(int a[],int n){
int *b = (int *)malloc(sizeof(int)*(n+1)); //声明一个长度为n+1的数组
memset(b,0,sizeof(int)*(n+1));
int i=0;
for(i=0;i<n;i++){ //遍历A数组,让B数组记录A中元素的个数
b[a[i]]+=1;
}
int flag = -1;
for(i=0;i<n+1;i++){ //找到B中元素大于n/2的索引,并赋值给flag;
if(b[i]>n/2){
flag = i;
break;
}
}
printf("%d",flag); //输出结果
}

(3)时间复杂度:O(n) 空间复杂度:O(n) 


评分及理由

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

得分:2分

理由:学生的算法思想与标准答案不同,但思路正确且可行。使用了辅助数组统计元素出现次数,符合题目要求。但未提及“候选主元素”的概念,且空间复杂度较高,扣2分。

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

得分:5分

理由:代码实现了学生的算法思想,逻辑正确,但存在以下问题:
1. 未返回结果,而是直接打印,与题目要求的输出方式不符(扣1分)。
2. 未释放动态分配的内存(扣1分)。
其他部分逻辑正确,代码清晰。

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

得分:2分

理由:时间复杂度和空间复杂度的分析正确,与算法实现一致。

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发