文章
21
粉丝
0
获赞
0
访问
1.0k

评分及理由
(1)得分及理由(满分3分)
学生给出了暴力法的基本设计思想:“使用三层for循环,依次遍历3个数组,用Min存储最小距离,最后输出距离最小的三元组”。该思路正确且清晰,符合暴力枚举所有三元组的基本方法,与标准答案中方法一的设计思想一致。因此得3分。
(2)得分及理由(满分8分)
该学生给出的代码基本实现了暴力法,主要逻辑正确:使用三层循环遍历所有三元组,计算距离并更新最小值。但存在以下缺陷:
int Find_Min(int S1[], int S2[], int S3[]),但未传入数组长度;在函数内部使用 n1 = sizeof(S1)/sizeof(S1[0]); 计算长度,这是错误的,因为数组作为函数参数时会退化为指针,sizeof无法获取正确长度,导致循环次数错误。此逻辑错误会严重影响程序正确性,需要扣分。但由于题目要求判断是否误写,考虑上下文,这里显然是学生对C语言数组传参理解不足导致的逻辑错误,而非识别错误,因此必须扣分。扣除3分。int Find_Min,但函数内部没有 return 语句,未返回最小值。虽然在函数内直接输出结果可能勉强符合题目“输出”的要求,但代码不规范,且题目要求“计算并输出”,缺少返回值会影响结果复用。扣除1分。int Min = 100000; 假设了最小值不会超过10万,不够严谨,但考虑到题目中示例数据不大和考试场景,可视为合理。不予扣分。a, b, c 用于记录三元组,但题目只要求输出最小距离,不是强制要求输出三元组;虽未明确扣分,但也无加分。综上,代码基本逻辑正确,但存在参数传错、缺少返回等影响正确性的缺陷,扣除4分,得4分。
(注:学生代码是暴力法,思路与标准答案方法一一致。标准答案中提到暴力法可得7-8分,由于学生代码有缺陷,给4分合理。)
(3)得分及理由(满分2分)
学生给出的时间复杂度为 O(n³)(实际应为 O(n1*n2*n3)),空间复杂度为 O(1),与暴力法实际复杂度一致,分析正确。得2分。
题目总分:3+4+2=9分
登录后发布评论
暂无评论,来抢沙发