文章
209
粉丝
1
获赞
100
访问
43.0k

评分及理由
(1)得分及理由(满分3分)
学生答案的基本设计思想是使用一个长度为 n+1 的辅助数组 B 来记录正整数 1 到 n 是否出现,然后遍历 B 找到第一个未出现的正整数。该思路正确,能够解决问题,且时间复杂度为 O(n),空间复杂度为 O(n)。虽然与标准答案(原地标记法,空间 O(1))不同,但根据评分要求“思路正确不扣分”,因此不扣分。得3分。
(2)得分及理由(满分8分)
学生用 C 语言描述了算法,整体逻辑与设计思想一致。但代码存在以下问题:
1. 函数没有处理所有情况下的返回值。当数组 A 中包含了 1 到 n 的所有正整数时,函数没有返回 n+1,而是没有返回值(函数执行结束但没有 return 语句),这属于逻辑错误。应扣2分。
2. 辅助数组 B 的大小声明为 `int B[n+1];`,但在第一个 for 循环中,`for(int i=0; i<=n; i++)` 会访问 B[n],这实际上是正确的,因为需要标记 1 到 n 这 n 个正整数,所以 B 索引 1 到 n 有效,索引 0 未使用。此处循环条件 `i<=n` 是合理的,不扣分。
3. 其他部分逻辑清晰,注释恰当。
因此,扣除逻辑错误2分后,得6分。
(3)得分及理由(满分2分)
学生正确分析了时间复杂度 O(n) 和空间复杂度 O(n),与算法实际性能一致。得2分。
题目总分:3+6+2=11分
登录后发布评论
暂无评论,来抢沙发