タスク
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
このアルゴリズムを自分で実装してみてください。