在线编译器 C

#include <stdio.h> int is_two_same(int size, int a[]) { int p = 0; for (int i = 0; i < size - 1; i++) { for (int j = i + 1; j < size - i - 1; j++) { if (a[j] == a[i]) { p = 1; } } } return p; } int main() { int a[5] = {1, 235, 34646, 3, 4}; printf("%d", is_two_same(5, a)); return 0; }
这段代码定义了一个函数 `is_two_same`,它检查数组中是否有两个相同的元素。如果有,返回1,否则返回0。主函数用一个测试数组调用它并打印结果。

你的代码有一个逻辑错误,导致它不能正确检查所有元素对。

- 内层循环的终止条件 `j < size - i - 1` 是错误的。这个条件会随着 `i` 增大而减少比较范围,导致漏掉一些元素对。你应该让内层循环遍历 `i` 之后的所有元素,直到数组末尾。
- 另外,当找到相同元素时,你设置了 `p = 1`,但没有提前退出循环。虽然不影响最终结果,但可以优化。不过这不是主要问题。