文章
141
粉丝
0
获赞
3
访问
17.7k

评分及理由
(1)得分及理由(满分3分)
学生答案的基本设计思想是使用辅助数组来标记出现过的正整数,思路正确且与标准答案(使用原数组标记)不同但等效,因此不扣分。得3分。
(2)得分及理由(满分8分)
学生代码实现了辅助数组方法,逻辑正确:初始化辅助数组为0,遍历原数组将有效正整数(1到n)映射到辅助数组下标并计数,最后遍历辅助数组(从下标1开始)找到第一个计数为0的位置即为结果。但代码存在两处问题:
1. 动态分配内存时,大小应为sizeof(int) * (n+2),但学生写的是sizeof(int) * n+2(第一次识别)和sizeof(int) * (n+2)(第二次识别),第二次识别正确,但第一次识别可能因运算符优先级导致分配空间不足(实际为n*sizeof(int)+2),但根据上下文判断为误写(括号缺失),不扣分。
2. 函数未返回默认值(如所有1~n都出现时应返回n+1),但代码中最后一个循环遍历到n+2(下标从1到n+1),因此当所有1~n都出现时,temp[n+1]为0,会返回n+1,逻辑正确。但代码缺少显式的return语句(循环后无return),但根据逻辑,循环一定会返回(因为辅助数组大小n+2,下标n+1必为0),但严格来说C语言函数未覆盖所有路径可能警告,但实际能工作。考虑到识别可能遗漏,且核心逻辑正确,扣1分。
综上,扣1分,得7分。
(3)得分及理由(满分2分)
学生正确分析了时间复杂度O(n)和空间复杂度O(n),与标准答案(空间O(1))不同但正确,不扣分。得2分。
题目总分:3+7+2=12分
登录后发布评论
暂无评论,来抢沙发