在线编译器 C

#include <stdio.h> int find_missing(int n, int a[]) { for (int i =0 ; i < n-1; i++) { int min = i; for(int j = i+1 ; i <n;j++) { if(a[j] < a[min]) { min =j; } } int tem = a[min]; a[min] = a[i]; a[i] = tem; } int i = 0; while (i == -1) { if(a[i+1] - a[i] ==2) { return a[i]+1; } i++; } return 0; } int main() { printf("Hello, World!\n"); return 0; }
这段代码试图实现一个功能:在一个包含 n-1 个连续整数的数组中找到缺失的那个数。但代码中有几个错误,导致它无法正确工作。

首先,排序部分的循环条件写错了。内层循环的 `i < n` 应该是 `j < n`,否则内层循环不会正确遍历数组。另外,排序完成后查找缺失数的逻辑也有问题。

- 排序的内层循环条件 `i < n` 应该是 `j < n`,否则循环不会按预期执行。
- 查找缺失数的 `while (i == -1)` 条件永远为假,因为 i 初始为 0,所以循环体不会执行。你需要重新思考如何遍历排序后的数组来找到相邻差为 2 的位置。