Online Compiler C

#include <stdio.h> int main() { int A[10]; for(int i=0;i<10;i++){ scanf("%d",&A[i]); } int max1,max2; if (A[0]>A[1]){ max1=A[0]; max2=A[1]; }else{ max1=A[1]; max2=A[0]; } for (int i=2;i<10;i++){ if(A[i]>max1){ max2=max1; max1=A[i]; }else if (A[i]>max2){ max2=A[i]; } } printf("%d\n",max1+max2); }
这段代码的功能是:读取10个整数存入数组,然后找出其中最大的两个数,并输出它们的和。

代码整体思路正确,但有一个边界情况没有处理:如果数组中存在重复的最大值,比如多个相同的最大值,你的逻辑仍然能正确找出两个最大的不同值吗?实际上,当A[i]等于max1时,它不会进入第一个if,也不会进入else if(因为条件要求大于max2),所以如果最大值重复,第二个最大值可能不会被正确更新。

- 考虑当A[i]等于max1时,是否需要更新max2?如果最大值有重复,你希望将重复的最大值也计入两个最大数吗?根据你的代码逻辑,目前不会计入。
- 检查一下else if的条件:当A[i]等于max1时,它既不大于max1,也不大于max2(因为max2小于max1),所以会被忽略。如果题目要求找出两个最大的数(允许相等),那么需要调整条件。