Online Compiler C

#include <stdio.h> int find_missing(int n, int a[]){ int min = a[0]; for (int i = 0; i < n; i++) { if (a[i] < min&&a[i]!=0) { min = a[i]; } } int b[1000]={0}; for(int i=0;i<n;i++){ for(int t=0;t<n;t++){ if(a[t]-min==i){ b[i]++; } } } int i=0; while(i<n){ if(b[i]==0){ break; }i++; } return i+min; } int main() { int a[10],n,answer; while(scanf("%d%d",&n,&a)){ answer=find_missing(10,a); } printf("%d",answer); }
这段代码试图在一个整数数组中找到缺失的数字,但存在几个问题。

代码的思路是:先找到数组中的最小值(排除0),然后创建一个计数数组b,统计每个差值出现的次数,最后找到第一个出现次数为0的差值,加上最小值得到缺失的数字。

- 主函数中的 `scanf("%d%d",&n,&a)` 用法有误。`a` 是数组名,不能直接作为整数读取。你需要先读取 `n`,再循环读取数组元素。
- `find_missing` 函数中,数组 `b` 的大小固定为1000,但实际需要的长度应该与 `n` 相关。如果数组中的数字范围很大,可能会越界。
- 循环条件 `while(scanf(...))` 会一直读取直到输入结束,但每次循环都会覆盖 `answer`,最终只保留最后一次的结果。你需要考虑如何正确处理多次输入。