Module: for ループ ステートメント。一般的なタスク


Problem

13 /16


2 番目の最大値

Theory Click to read/hide

タスク

N 個の数値が与えられます。シーケンス内で 2 番目に大きい要素を見つけます。

この問題では2つの解釈が可能
です。 たとえば、一連の数値 \(10\ 15\ 20\ 35\ 14\ 35\ 10\) が与えられた場合、答えは何になりますか? ?
「2 番目に大きい要素」の下にまたは単に「2 番目の最大値」は次のように理解できます。
1)すべての値を非降順で並べた(ソートした)場合に最後から2番目の位置にある値(次の値はそれぞれ前の値以上になります)。次に、考慮された一連の数値の答えは値 35 になります。
2) 最大値よりも大きい要素の値。すると答えは20になります
。 数値の集合の中に最大の要素が 1 つだけある場合 (他はすべて小さい)、どちらの解釈も同じで、どちらの場合でも答えは同じになります。それ以外の場合、答えは異なります。

最初のケースを考えてみましょう (アルゴリズムは 疑似コード)。
答えを見つけるために、次の 2 つの変数を使用します。
1) maximum1 - 最大値 (最初の最大値);
2) maximum2 - 2 番目の最大値 (私たちの答え)。

値の変化の範囲がわかっている場合は、範囲の下限より明らかに小さい数値を初期値として採用します (たとえば、-1000 の範囲) から 1000 - 数字を入力します -1001)
値の範囲が不明な場合は、最初の 2 つの入力数値を変数 max1 max2 の初期値に書き込み、これらを比較できます。 2 つの変数。 <プレ> input N //数値の数 a、bを入力 max1 = a max2 = b b > の場合ああ、それでは     max1 = b     max2 = a
次に、他のすべての要素を検討します (最初の 2 つはすでに表示されているため、3 番目から始めます)。 <プレ> nc for i 3 から n を入力してください >の場合Maximum1 //maximum1 より大きい値がありました それか max2 = max1 //前の最初の高値が 2 番目の高値になります max1 = a //新しい要素が最初の最大値になります さもないと // 次の要素は max1 を超えないようにします // max2 の値と比較する必要があります >の場合最大2 それか max2 = a //それを新しい値として受け取ります max2 // この場合、max1 は変更されません 全て 全て kts
このアルゴリズムを自分で実装してみてください。

Problem

N 個の整数が与えられます。シーケンスの 2 番目に大きい要素 (入力が非降順で並べ替えられた場合に最後から 2 番目にある要素) を見つけます。

入力
最初の行は数値 N (\(2<=N<=10^4\)) を指定します。 その後に N 行、各行には 105 モジュロを超えない 1 つの整数。

インプリント
2 番目に大きい要素を出力します。

 

<頭> <本体>
# 入力 出力
1 7
10
15
20
35
14
35
10
35
2 5
10
5
7
11
9号
10