Онлайн компилятор 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) { min = a[i]; } } int c[n] = {0}; for (int t = 0;t < n;t++) { for (int i = min; i < min + n; i++) { if (i != a[t]) { c[t]++; } } } int i = 0; while (i < n) { if (c[i] == n) { break; } i++; } return i+min; } int main() { int a[1000], answer; while (scanf("%d", a)==1) { answer = find_missing(10, a); } printf("%d", answer); return 0; }
这段代码试图在一个长度为10的数组中找出缺失的一个整数,但存在逻辑错误。代码先找到数组最小值,然后试图通过计数判断哪个数缺失,但计数逻辑不正确。

- 内层循环 `for (int i = min; i < min + n; i++)` 中,你检查每个 `i` 是否不等于 `a[t]`,然后对 `c[t]` 加1。这样 `c[t]` 会记录数组元素 `a[t]` 与多少个连续整数不相等,而不是记录每个整数在数组中出现的次数。你需要重新思考如何标记每个整数是否出现过。

- 最后返回 `i+min` 时,`i` 是 `c` 数组中值为 `n` 的下标,但 `c` 数组的索引与数值的对应关系不明确。你应该让 `c` 数组的索引直接对应从 `min` 开始的整数,而不是用 `t` 作为索引。