問題
個の整数 が与えられる。 このうち、最大でない整数の中で最大の整数を求めよ。
入力
最初の1行目に、整数 が与えられる。
その次の1行に、 個の整数 が順に与えられる。
条件
- が全て等しいということはない。
出力
答えとなる整数を出力すること。
解法
整数 について、降順にソートしたものを とします。 このとき、 \begin{align} {b}_{1} \geq {b}_{2} \geq \cdots \geq {b}_{n} \end{align} が成立します。
従って、降順にソートされた数列 について、 から順にforループを回していき、初めて である が現れたら、その値が答えとなります。
問題の条件から、 がすべて等しいということはないので、このような の値は必ず存在します。
ソースコード
以下のようにして、main()
の中に直接答えを出力するようにしました。
int n, a[105]; int main() { // 値の入力 cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a, a + n, greater<int>()); // 数列 a を降順でソートする for (int i = 0; i < n; i++) { if (a[i] == a[0]) { continue; // a[i] が最大値(a[0]) のときは次の i を見る } cout << a[i] << endl; // 最大値でないときはその値を出力させ、forループから抜ける break; } return 0; }