Онлайн компилятор C

#include <stdio.h> int find_missing(int n, int a[]) { int M = a[0], N = a[0]; for (int i = 0; i < n; i++) { if (a[i] < M && a[i] != 0) { M = a[i]; } if (a[i] > N) { N = a[i]; } } int num = N - M + 1; int count[num] = {0}; for (int digit = M; digit <= N; digit++) { for (int i = 0; i < n; i++) { if (a[i] == digit) { count[digit - M] = 1; } } } for (int i = 0; i < num; i++) { if (count[i] == 0) { return i + M; } } } int main() { return 0; }
这段代码试图在一个整数数组中找出缺失的数字。它先找到数组的最小值M和最大值N,然后创建一个大小为N-M+1的计数数组,标记哪些数字出现过,最后返回第一个未出现的数字。

你的代码有几个问题需要注意:

- 在寻找最小值时,你排除了0,但题目可能允许0出现在数组中。如果数组中有0,它会被错误地忽略,导致最小值计算错误。
- 如果数组中没有缺失的数字,函数最后没有返回值,这会导致未定义行为。你需要考虑这种情况应该返回什么。
- 计数数组的初始化方式在C语言中可能不合法,因为变长数组不能这样初始化。你需要用循环来初始化所有元素为0。