21xrx.com
2025-03-18 12:33:33 Tuesday
文章检索 我的文章 写文章
「C++ OJ题解」 1.5.16 题解
2023-07-13 10:45:15 深夜i     9     0
C++编程语言 OJ在线评测 题目解析 16题目 算法思路

「C++ OJ题解」1.5.16 题解

本题是一道关于数组求解的练习题,通过对题目要求的分析,我们需要实现一个算法,能够找到数组中的最大值和次大值,并输出它们的下标以及值。

首先需要明确的是,对于一个大小为n的数组,我们需要使用一次循环遍历才能找到最大值和次大值,时间复杂度为O(n)。在寻找最大值和次大值过程中,需要用到两个变量分别表示当前数组中最大值和次大值,并用一个变量记录它们的下标。

在代码实现中,我们可以使用这样的方式:

int maxIndex = 0, secondMaxIndex = 0;
double maxValue = a[0], secondMaxValue = a[0];
for (int i = 1; i < n; ++i) {
  if (a[i] > maxValue) {
    secondMaxIndex = maxIndex;
    secondMaxValue = maxValue;
    maxValue = a[i];
    maxIndex = i;
  } else if (a[i] > secondMaxValue) {
    secondMaxValue = a[i];
    secondMaxIndex = i;
  }
}

代码中,我们先初始化最大值和次大值为a[0],并迭代整个数组,如果当前a[i]的值比最大值要大,则当前最大值成为次大值,而a[i]成为最大值,同时更新最大值的下标,否则如果a[i]比次大值大,则次大值为a[i],同时更新次大值的下标。

最后我们输出最大值和次大值的值以及下标。

完整的代码实现如下:

#include <iostream>
using namespace std;
int main()
{
  const int n = 10;
  double a[n] = 7;
  int maxIndex = 0, secondMaxIndex = 0;
  double maxValue = a[0], secondMaxValue = a[0];
  for (int i = 1; i < n; ++i) {
    if (a[i] > maxValue) {
      secondMaxIndex = maxIndex;
      secondMaxValue = maxValue;
      maxValue = a[i];
      maxIndex = i;
    } else if (a[i] > secondMaxValue) {
      secondMaxValue = a[i];
      secondMaxIndex = i;
    }
  }
  cout << "Max value: " << maxValue << ", Index: " << maxIndex << endl;
  cout << "Second max value: " << secondMaxValue << ", Index: " << secondMaxIndex << endl;
  return 0;
}

本题实现起来较为简单,但需要在细节上严谨处理,能够锻炼我们在实际开发中的细致、严谨的编程态度。

  
  

评论区

    相似文章