文章
63
粉丝
0
获赞
0
访问
2.5k
(1)将数组a从大到校排序,先找到第一个正整数的位置,正整数应该是1,2,3,4,5....如果有哪个整数没有则输出为未出现的最小正整数
(2) int f(int a[]){
sort(a,sizeof(s));
for(int i=0;i<sizeof(s);i++){
if(a[i]>0)break;
}
int j=1;
for(;i<sizeof(s);i++){
while(a[i+1]==a[i])i++; //若有相同的数字,则跳到最后一个相同的数字
if(a[i]!=j)rentun j;
j++;
}
(3)时间复杂度:O(n)
空间复杂度:O(1)
评分及理由
(1)得分及理由(满分3分)
得分:1分
理由:学生提出了排序后遍历查找的思路,基本方向正确,但设计思想描述不够清晰完整。没有说明如何处理重复元素和连续正整数的匹配逻辑,也没有考虑所有正整数都出现时返回n+1的情况。相比标准答案的原地哈希法,这种方法虽然可行但效率较低。
(2)得分及理由(满分8分)
得分:3分
理由:代码存在多处严重问题:
1. sizeof(s)使用错误,s未定义
2. 排序函数调用格式错误,缺少必要的头文件和参数
3. 变量i的作用域问题,第一个循环结束后i的值在第二个循环中使用
4. while循环中i++可能导致数组越界
5. 缺少处理所有正整数都出现时返回n+1的逻辑
6. 代码语法错误(rentun应为return)
7. 代码不完整,缺少函数结束的大括号
虽然整体思路方向正确,但代码实现存在大量逻辑错误和语...
登录后发布评论
暂无评论,来抢沙发