Online Compiler C

#include <stdio.h> int main() { int n = 10, c = 0, d = 0; int a[10]; int min, max; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } min = a[0]; for (int i = 0; i < n; i++) { if (a[i] <= min) { min = a[i]; c = i + 1; } } max = a[0]; for (int p = 0; p < n; p++) { if (a[p] >= max) { max = a[p]; d = p + 1; } } printf("%d %d %d %d", d, max, c, min); return 0; }
这段代码的功能是:读入10个整数,找出最大值及其位置(从1开始计数),以及最小值及其位置,然后按顺序输出最大值位置、最大值、最小值位置、最小值。

代码中有一个潜在问题:当有多个相同的最小值或最大值时,位置记录的逻辑可能不符合预期。

- 对于最小值,你使用了 `<=` 条件,所以当遇到相等或更小的值时都会更新位置。这意味着最终记录的是最后一个最小值的位置,而不是第一个。
- 对于最大值,你使用了 `>=` 条件,同样会记录最后一个最大值的位置。

请思考:题目要求的是第一个最小值/最大值的位置,还是最后一个?根据你的条件,你得到的是最后一个。如果需要第一个,应该使用什么比较符号?