文章

20

粉丝

0

获赞

0

访问

569

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

(1)因为题目要求算法在时间上尽可能高效,所以基本设计思想是用空间换时间。构造一个包含n位的数组B,遍历给定的数组的同时,对数组出现的元素a,如果是正整数,则在数组A[a]上置1。没出现过的元素在数组B的对应元素下标的内容为0;遍历完一边数组之后,遍历构造的数组B,第一个出现0的数组下标就是数组中未出现的最小正整数。

(2)

void SearchMinnum(A,n)

{

B=(int*)malloc(n*sizeof((n));

while (i>=n)

{

if(A[i]>0)

{

B[i]=1;

}

}

for(i=0,i<=n,i++)

{

if(B[i]==0)

{

return i;

break;

}

}

}

(3)

因为构造辅助数组所以空间复杂度是n。时间复杂度是n。


评分及理由

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

得分:2分

理由:学生的基本设计思想是使用辅助数组来标记出现的正整数,思路正确且符合时间高效的要求。但存在以下问题:
1. 没有明确指出辅助数组的大小应该是n+1(因为可能出现的正整数范围是1~n+1)
2. 没有考虑数组元素可能大于n的情况
3. 没有明确说明如何处理重复元素
思路基本正确但不够完善,扣1分。

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

得分:3分

理由:代码实现存在较多逻辑错误:
1. 函数参数声明不完整,缺少参数类型
2. malloc分配错误,应该是(n+1)*sizeof(int)
3. while循环条件错误,应该是i < n
4. 标记逻辑错误,应该是B[A[i]] = 1,而不是B[i] = 1
5. for循环语法错误,应该使用分号而不是逗号
6. 循环条件应该是i <= n而不是i <= n
7. 没有初始化辅助数组B为0
8. 缺少必要的头文件包含
9. 函数没有返回值类型声明
由于存在多个严重逻辑错误,扣5分。

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

得分:1分

理由:学生正确分析了时间复杂度为O(n)和空间复杂度为O(n),但空间复杂度分析不够准确,实际应该是O(n)而不是简单的n。扣1分。

题目总分:2+3+1=6分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发