#include <stdio.h>
int main() {
int a[10];
int m, n;
for (int d = 0; d < 10; d++) {
scanf("%d", &a[d]);
}
m = a[0];
n = a[1];
for (int d = 2; d < 10; d++) {
if (a[d] > m) {
n = m; m = a[d];
}
if (m >= a[d] && n < a[d]) {
n = a[d];
}
}
int c = m + n;
printf("%d", c);
return 0;
}
这段代码试图找出数组中最大的两个数并求和。但逻辑上有问题,导致结果可能不正确。
- 在第一个 if 中更新 m 后,紧接着的第二个 if 条件判断时,m 已经被更新为新的最大值,这会导致 n 的更新逻辑混乱。例如,当遇到比当前 m 更大的数时,应该把旧的 m 赋给 n,但你的代码中第二个 if 可能会错误地跳过或重复赋值。
- 初始时 m 和 n 分别设为 a[0] 和 a[1],但没有比较它们的大小。如果 a[0] 小于 a[1],那么 m 不是真正的最大值,后续逻辑会出错。