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) { 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; } int main() { int a[1000], answer; while (scanf("%d", a)) { answer = find_missing(10, a); } printf("%d", answer); return 0; }
这段代码试图找出一个长度为n的数组中缺失的那个整数。数组应该包含从某个最小值开始的连续n+1个整数,但缺少了一个。代码目前有几个问题。

- 第一个循环正确找到了数组中的最小值。
- 第二个循环的语法有错误:`for (int t = 0, t < n;,t++)` 中逗号和分号使用不当,导致编译错误。循环内部逻辑也不对——它试图对每个元素t,统计有多少个整数不在数组中,但方法有误。
- 最后的while循环试图找到第一个计数等于n的位置,但返回的是索引i,而不是缺失的数字本身。

- 提示1:第二个循环的语法需要修正。注意for循环的标准写法是三个部分用分号分隔,而不是逗号。另外,循环内部应该检查每个可能的整数是否出现在数组中,而不是用当前元素去比较所有整数。
- 提示2:思考一下缺失数字与最小值的关系。如果数组包含从min到min+n的连续整数(缺一个),那么缺失的数字应该等于min加上某个偏移量。你现在的返回是索引i,但i只是数组下标,不是缺失的数字。