Онлайн компилятор C

#include <stdio.h> enum{size=10}; int main() { int A[size]; for(int i=0;i<size;i++){ scanf("%d",&A[i]); } int max1=A[0],max2=A[1],sum; if(A[1]>A[0]){ max1=A[1]; max2=A[0]; } sum=0; for(int i=0;i<size;i++){ if(A[i]>max1){ max1=A[i]; } } for(int i=0;i<size;i++){ if(A[i]>max2&&A[i]<max1){ max2=A[i]; } } sum=max1+max2; printf("%d",sum); return 0; }
这段代码的功能是:从用户输入的10个整数中,找出最大的两个数,并输出它们的和。

代码的思路是:先读入10个数,然后分别找出最大值和第二大值,最后相加输出。

- 注意:代码在初始化 `max1` 和 `max2` 时,直接取了 `A[0]` 和 `A[1]`,但并没有考虑这两个数相等的情况。如果前两个数相等,比如都是5,那么 `max1` 和 `max2` 初始都是5,后续找第二大值时,条件 `A[i] < max1` 会排除所有等于5的数,导致第二大值可能不正确。

- 另外,如果所有数都相等,比如全是5,那么第二个循环中 `A[i] > max2 && A[i] < max1` 永远不会成立,`max2` 会保持初始值 `A[1]`(也是5),结果仍然是正确的。但如果有重复的最大值,比如数组是 [5, 5, 4, ...],那么第二大值应该是4,但代码中 `max1` 和 `max2` 初始都是5,第二个循环会跳过所有等于5的数,最终 `max2` 保持为5,导致结果错误。