Online Compiler C

#include <limits.h> #include <stdio.h> void print_min_sum_indices(int n, int a[]) { int min_sum = INT_MAX; int idx1 = 0, idx2 = 1; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { int current_sum = a[i] + a[j]; if (current_sum < min_sum) { min_sum = current_sum; idx1 = i; idx2 = j; } } } printf("%d %d\n", idx1, idx2); }
这段代码的功能是:在整数数组中找到两个元素,使它们的和最小,然后输出这两个元素的下标(索引)。它使用了两层循环遍历所有可能的元素对,并记录当前找到的最小和及其对应的下标。

- 代码中 `idx1` 和 `idx2` 的初始值设为 0 和 1,但需要注意:如果数组长度小于 2,或者所有元素对的和都大于 `INT_MAX`(实际上不会发生),这个初始值可能不合适。不过更关键的是,当数组中有多个元素对的和相同时,代码只输出第一次遇到的最小和对应的下标,这可能是符合要求的。

- 你的代码逻辑基本正确,但有一个边界情况需要考虑:如果数组中有负数,`INT_MAX` 作为初始最小值是合理的。但请检查当 `n` 小于 2 时,程序会怎样?比如 `n=1` 或 `n=0` 时,循环可能不会执行,但 `printf` 仍然会输出初始的 `idx1` 和 `idx2`,这可能导致错误。