在线编译器 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 - 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 - 1` 有问题。当 `i` 遍历到倒数第二个元素时,`j` 应该能访问到最后一个元素,但当前条件让 `j` 无法到达 `size-1` 这个索引。检查一下内层循环的边界应该是什么。
- 函数中一旦找到相同元素就设置了 `p = 1`,但循环仍然继续执行。虽然不影响最终结果,但效率不高。思考一下,如果已经找到一对相同元素,是否还需要继续检查?