Онлайн компилятор 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)) { answer = find_missing(10, a); } printf("%d", answer); return 0; }
这段代码试图在一个长度为n的数组中找出缺失的那个整数。数组应该包含从某个最小值开始的连续n+1个整数,但缺少了一个。代码的思路是:先找到数组中的最小值,然后创建一个计数数组,最后通过计数找到缺失值。

代码中存在几个语法错误和逻辑问题。

- 第9行的for循环使用了逗号而不是分号,这是语法错误。C语言的for循环三个部分必须用分号分隔。
- 第10行的内层循环中,条件判断`i != a[t]`的逻辑不正确。这个循环试图统计每个位置t上,从min到min+n-1中有多少个数字不等于a[t],但这并不能正确找出缺失的数字。你需要重新思考如何标记数组中已经存在的数字。
- 最后返回`i+min`,但i是计数数组的下标,这个计算方式可能不正确。你需要考虑缺失值相对于最小值的位置关系。