在线编译器 C

#include <stdio.h> int main() { int n = 10; int a[10]; int max1, max2; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } max1 = a[0]; max2 = a[0]; for (int i = 0; i < n; i++) { if (a[i] > max1) { max1 = a[i]; } } for (int i = 0; i < n; i++) { if (a[i] > max2 && a[i] != max1) { max2 = a[i]; } } int sum = max1 + max2; printf("%d", sum); return 0; }
这段代码的功能是:读入10个整数,找出其中最大的两个数,并输出它们的和。代码整体思路正确,但有一个潜在问题。

- 如果数组中的最大值出现多次(例如有两个相同的最大值),那么第二个循环中 `a[i] != max1` 的条件会导致第二个最大值也被跳过,从而可能无法正确找到第二大的数。例如输入 `10 10 9 8 ...`,程序会认为第二大的数是初始值 `a[0]` 而不是9。
- 另外,如果所有数都相同,比如全部是5,那么 `max2` 会保持为 `a[0]` 即5,但此时实际上没有“第二大”的数,不过题目可能允许这种情况,需要根据具体要求判断。