けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

JOI 一次予選 2021 (第 1 回) A - 2 番目に大きい整数 (7Q, 難易度 1)

この時代の一次予選は、まだちょっと難しかった

問題概要

3 個の整数  A, B, C が与えられる。これらの整数のうち、2 番目に大きい値を求めよ。

制約

  •  1 \le A, B, C \le 100

解法 (1)

最も楽だと思われる方法は、3 個の整数のうちの「最大値」と「最小値」を求めてあげる方法だと思われる。

3 個の整数は「最小値」「2 番目」「最大値」というように 3 つに分けることができるので、2 番目に大きい値は次のように求められる。


(3 個の整数の和) - (最大値) - (最小値)


コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int A, B, C;
    cin >> A >> B >> C;

    int mi = min({A, B, C});
    int ma = max({A, B, C});
    cout << (A + B + C) - (mi + ma) << endl;
}

 

解法 (2)

もしソート関数 sort() が使えるならば、それを使ってしまえば楽に求められる。

たとえば、サイズ 3 の配列 a として入力を受け取り、次のようにすればよい。


  1. 配列 a を小さい順にソートする
  2. このとき、配列 a は小さい順に a[0], a[1], a[2] となるので、a[1] が答え

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> a(3);
    for (int i = 0; i < 3; ++i) cin >> a[i];
    sort(a.begin(), a.end());
    cout << a[1] << endl;
}