【数组】求最大值及其下标

题目:求最大值及其下标。
要求:找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式
  输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式
  在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
  
输入样例:

6
2 8 10 1 9 10

输出样例:

10 2

思路一:由于题目中要求的时输入n个正整数,数量不确定,故可以考虑数组来存储不确定个数的变量;

  1. 先定义数组(其数组长度取最大值,题目要求为10),然后通过for循环给数组一个个赋值,即可得到一个数组;
  2. 找数组的最大值,这一步是最关键的一步,由于所输入的值不确定那个是最大值,故可以先设置另一个一个变量(index)来存储最大值变量的下标,紧接着继续在数组里for循环,逐一跟下标为index的值相比较,如果比下标为index的值大,这时候就将两者中数值大的下标赋值给index;
  3. 按要求输出。
  4. 代码多用为C语言。

代码如下

#include<stdio.h>
int main(){
  int a[11], n, i, index;
  scanf("%d", &n);
  for(i = 0; i < n; i++){  //将输入数依次赋给数组a的n个元素;
    scanf("%d", &a[i]);
  }
  index = 0;              //假设a[0]为最大值,index存储最大值下标;
  for(i = 1; i < n; i++){
    if(a[i] > a[index]){   //如果a[i]比假设的的最大值还大,
      index = i;           //再假设a[i]是新的最大值;
    }
  }
  printf("%d %d", a[index], index);//打印出最大值以及最大值对应的下标
  return 0;
}
### 如何在数组中找到最大值及其索引位置 为了在一个数组中找到最大值及其对应的索引位置,可以采用多种编程语言中的不同方法来实现。以下是几种常见的解决方案: #### 方法一:遍历数组 通过逐一比较数组中的每个元素,记录当前遇到的最大值及其索引。 ```csharp public static Tuple<int, int> FindMaxAndIndex<T>(T[] arr) where T : IComparable<T> { if (arr == null || arr.Length == 0) throw new ArgumentException("Array is empty or null."); var maxValue = arr[0]; var maxIndex = 0; for (var i = 1; i < arr.Length; ++i) { if (arr[i].CompareTo(maxValue) > 0) { maxValue = arr[i]; maxIndex = i; } } return Tuple.Create(Convert.ToInt32(maxValue), maxIndex); } ``` 上述代码实现了寻找数组最大值及其索引的功能[^1]。该方法的时间复杂度为 O(n),其中 n 是数组长度。 --- #### 方法二:使用 JavaScript 的内置函数 JavaScript 提供了一些便捷的方法用于处理数组操作,例如 `reduce` 和 `indexOf` 函数。 ```javascript function findMaxAndIndex(arr) { if (!Array.isArray(arr) || arr.length === 0) { throw new Error('Invalid input array.'); } const max = arr.reduce((prev, curr) => (curr > prev ? curr : prev)); const index = arr.indexOf(max); return { max, index }; } // 示例调用 const result = findMaxAndIndex([9, 8, 55, 66, 49, 68, 109, 55, 33, 6, 2, 1]); console.log(result); // 输出: { max: 109, index: 6 } ``` 此方法利用了 `reduce()` 来计算最大值,并通过 `indexOf()` 获取对应索引[^4]。 --- #### 方法三:基于 Python 实现 Python 中可以通过简单的列表推导式或者内置函数快速完成这一需。 ```python def find_max_and_index(lst): if not lst: raise ValueError("List cannot be empty.") max_value = max(lst) max_index = lst.index(max_value) return max_value, max_index # 示例调用 result = find_max_and_index([9, 8, 55, 66, 49, 68, 109, 55, 33, 6, 2, 1]) print(result) # 输出: (109, 6) ``` 这里借助了 Python 的 `max()` 和 `index()` 函数[^5]。 --- #### 方法四:C++ 使用 STL 库 对于 C++ 用户来说,标准模板库提供了方便的工具来进行此类操作。 ```cpp #include <vector> #include <algorithm> std::pair<int, size_t> findMaxAndIndex(const std::vector<int>& nums) { if (nums.empty()) { throw std::invalid_argument("Vector must contain at least one element."); } auto it = std::max_element(nums.begin(), nums.end()); return { *it, std::distance(nums.begin(), it) }; } // 示例调用 int main() { std::vector<int> vec = {9, 8, 55, 66, 49, 68, 109, 55, 33, 6, 2, 1}; auto [max_val, idx] = findMaxAndIndex(vec); printf("Max Value: %d, Index: %zu\n", max_val, idx); // 输出: Max Value: 109, Index: 6 return 0; } ``` 这段代码展示了如何使用 `<algorithm>` 头文件中的 `std::max_element` 找到最大值及其迭代器位置[^3]。 --- ### 结论 无论选择哪种语言或方式,核心思路都是通过对整个数据集的一次扫描找出目标值及其所在位置。具体实现可以根据实际应用场景和个人偏好调整优化策略。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值