Module: (C++) For 循环运算符。典型任务


Problem

13 /16


第二大

Theory Click to read/hide

任务

给出了 N 个数字。查找序列中第二大的元素。

这个问题有两种解释。
例如,如果给我们一组数字:\(10\ 15\ 20\ 35\ 14\ 35\ 10\),那么答案应该是什么?
在“第二大元素”下或者简称“次大”,可以理解为:
1) 如果我们将所有值\u200b\u200bin 非降序排列(排序)(每一个都大于或等于前一个),将会在倒数第二位的值。那么对于所考虑的一组数字,答案将是值 35;
2) 元素的值,仅大于最大值。那么答案是20。
如果数字集合中只有一个最大元素(其他的都更少),那么两种解释都是一样的,两种情况的答案都是一样的,否则答案是不同的。

考虑第一种情况(我们将在 伪代码).
为了找到答案,我们将使用两个变量:
1)maximum1——最大值(第一个最大值);
2) maximum2 - 第二个最大值(我们的答案)。

如果值变化的范围是已知的,那么我们取一个明显小于范围下限的数字作为初始值(例如,范围从 -1000 1000 -取数 -1001)
如果取值范围未知,那么可以将前两个输入的数分别写入变量max1max2的初始值,然后比较这些两个变量。 <前> input N //数字个数 输入 a, b 最大值 1 = 一个 最大值2 = b 如果 b >一个,然后    最大值 1 = b     max2 = 一个
接下来,我们考虑所有其他元素(前2个已经看过,所以我们从第3个开始) <前> nc 代表我从 3 到 n 输入一个 如果一个> maximum1 //有一个值大于maximum1 那 max2 = max1 //之前的第一个高点变成第二个 max1 = a //新元素将是第一个最大值 否则 //下一个元素不超过max1 // 需要和maximum2值比较 如果一个>最多 2 那 max2 = a //作为新值max2 // 在这种情况下 max1 不会改变 全部 全部 节拍
尝试自己实现这个算法。

Problem

给定 N 个整数。查找序列中第二大的元素(如果输入按非降序排序,则为倒数第二大的元素)。

输入
第一行指定数字N (\(2<=N<=10^4\))。 后面是 N行,每行 一个不超过105模的整数。 

印记
打印第二大元素。

 

例子
<头> <日># <正文>
输入 输出
1 7
10
15
20
35
14
35
10
35
2 5
10
5
7
11
9
10