文章

102

粉丝

0

获赞

3

访问

5.6k

头像
2018年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年12月4日 18:03
阅读数 10


评分及理由

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

得分:0分。理由:学生提出的“计数排序思想”与题目要求不符。其基本设计是使用一个额外的flag数组,但flag[i]记录的是原数组a[i]是否为正数,而不是记录正整数1到n是否出现。例如,对于数组{3, 4, 5},按照学生的算法,flag[1](对应a[1]=4>0)会被置1,然后遍历flag从i=1开始找0,会返回1(因为flag[0]未被访问),但正确答案是1,这看似巧合,实际上逻辑是错误的。因为flag的下标i对应的是原数组下标,而不是正整数本身。当原数组为{2, 1, 3}时,flag[0]=1, flag[1]=1, flag[2]=1,遍历flag从i=1开始,flag[1]==1,继续,最后返回n+1=4,但正确答案是4,这又是巧合,因为数组恰好包含了1,2,3。但若数组为{1, 100, 3},按学生算法,flag[0]=1, flag[1]=1, flag[2]=1,遍历flag从i=1开始,flag[1]==1,继续,最后返回4,但正确答案是2。因此,基本设计思想存在根本性逻辑错误,无法正确解决问题,故得0分。

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

得分:0分。理由:代码实现基于错误的设计思想。函数search试图通过flag数组标记原数组正数位置,但flag数组未定义和初始化(代码中未声明flag,也未分配内存)。即使忽略此问题,其核心逻辑也是错误的:第二个循环从i=1开始遍历flag,这假设了最小未出现正整数至少为1,但判断依据是flag[i]==0,而flag[i]只与原数组a[i]是否为正有关,与正整数i是否出现无关。例如,a[0]可以是任意正数,但flag[0]被置1,如果最小未出现正整数是1,算法无法检测到(因为从i=1开始循环)。代码无法正确实现题目要求的功能,存在严重逻辑错误,故得0分。

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

得分:1分。理由:学生正确给出了时间复杂度O(n)和空间复杂度O(n)。时间复杂度分析正确,因为算法包含两个O(n)的循环。空间复杂度分析也正确,因为使用了一个额外的flag数组,大小为n。尽管算法本身是错误的,但针对学生所描述的算法(使用额外数组),其复杂度的计算是正确的,因此给予1分。

题目总分:0+0+1=1分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发