Online Compiler C

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

代码的思路是:先统计数组中每个数字出现的次数,然后找到数组中的最小值,再从最小值开始检查哪个数字没有出现,最后返回第一个缺失的数字。

- 第4行 `int c[a[t]]={0};` 有问题。这里 `a[t]` 的值在编译时未知,不能用来定义数组大小。而且这个数组应该能覆盖所有可能出现的数字范围,但这里只用了第一个元素的值,逻辑不对。
- 第5行 `while(a[t]!=0)` 假设数组以0结尾,但题目并没有说明数组以0作为结束标志。如果数组中没有0,这个循环会越界。
- 主函数中 `int a[1000];answer;` 缺少逗号,应该是 `int a[1000], answer;`。另外 `while(scanf("%d",a))` 会一直读取直到输入结束,但每次循环都调用 `find_missing(10,a)`,而 `a` 的内容是不断被覆盖的,逻辑混乱。