Online Compiler C

#include <stdio.h> int find_missing(int n, int a[]) { int min = 0; min = a[0]; for (int i = 0; i < n; i++) { if (a[i] < min) { min = a[i]; } } int max = a[0]; for (int i = 0; i < n; i++) { if (a[i] > max) { max = a[i]; } } int num = 0; for (int q = min; q < max; q++) { num = 0; for (int i = 0; i < n; i++) { if (a[i] == q) { num++; } } if (num != n) { return q; } } } int main() { int a[5] = {1, 2, 3, 5, 6}; printf("%d", int find_missing(a)) return 0; }
这段代码试图找出数组中缺失的一个整数。它先找到数组的最小值和最大值,然后检查从最小值到最大值之间的每个数是否在数组中出现。但代码有几个问题。

- 在 `main` 函数中调用 `find_missing` 的方式不对,你写成了 `int find_missing(a)`,但函数需要两个参数:数组长度和数组本身。另外 `printf` 语句后面缺少分号。

- 在 `find_missing` 函数内部,判断缺失数的条件 `if (num != n)` 逻辑有误。`num` 记录的是当前数 `q` 在数组中出现的次数,而 `n` 是数组总长度。你想表达的是“如果这个数没出现过”,但 `num != n` 并不是这个意思。应该检查 `num` 是否等于 0。

- 另外,如果数组中没有缺失数(比如连续递增),函数最后没有返回值,这会导致未定义行为。