从输入的n个整数序列(序列中元素存在相同情况)中找出最小值及其对应的最大下标(下标从0开始)
时间: 2024-12-19 13:26:55 浏览: 4
在C语言中,你可以通过遍历一次数组来找到最小值和其最大下标。这里有一个简单的示例:
```c
#include <stdio.h>
#include <limits.h> // 包含INT_MIN用于初始比较
// 函数原型
void find_min_and_max(int arr[], int n, int *min_val, int *max_idx);
int main() {
int arr[] = {5, 9, 1, 7, 3, 6, 4, 5, 8};
int n = sizeof(arr) / sizeof(arr[0]);
int min_val, max_idx;
// 初始化最小值为正无穷大,最大下标为-1
*min_val = INT_MAX;
*max_idx = -1;
find_min_and_max(arr, n, &min_val, &max_idx);
printf("最小值: %d, 最大下标: %d\n", min_val, max_idx);
return 0;
}
// 寻找最小值及最大下标
void find_min_and_max(int arr[], int n, int *min_val, int *max_idx) {
for (int i = 0; i < n; i++) {
if (arr[i] < *min_val) { // 如果当前元素小于当前最小值
*min_val = arr[i]; // 更新最小值
*max_idx = i; // 更新最大下标为当前下标
} else if (arr[i] == *min_val && i > *max_idx) { // 当前元素等于最小值,但位置更靠后
*max_idx = i; // 更新最大下标
}
}
}
```
在这个程序里,我们先初始化`min_val`为整型范围内的最大值`INT_MAX`,`max_idx`为-1。然后遍历整个数组,每当找到一个比当前`*min_val`小的元素,就更新`min_val`和`max_idx`。同时,如果遇到的元素恰好等于最小值,但其位置大于已知的最大下标,我们也更新`max_idx`。
阅读全文