Online Compiler C

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

代码的思路是:先遍历一遍找到最大值max1,再遍历一遍找到不等于max1的最大值作为第二大的数max2,最后求和输出。

- 你的代码在处理最大值出现多次的情况时有问题。如果数组中有多个相同的最大值,比如输入5个10和5个9,你的代码会把所有等于max1的元素都排除掉,导致max2找不到正确的第二大的数。实际上,第二大的数应该是9,但你的代码会跳过所有等于10的元素,包括那些不是同一个位置的重复值。

- 考虑如何区分“最大值本身”和“与最大值相等的其他元素”。你可以记录最大值第一次出现的位置,或者使用其他方法在第二次遍历时只排除那一个特定的最大值元素,而不是排除所有等于最大值的元素。