問題の入力変数が多いので、読み解くのが大変かもしれないですね。
問題概要
AtCoder ドリンクは定価である 円を払えば飲むことができます。
また、割引券を持っており、それを使うと AtCoder ドリンクを定価より安い価格である 円で飲むことができますが、 その場合には AtCoder ドリンクの他に、 品ある料理の中から 1 つを追加で注文しなければなりません。
について、 番目の料理の価格は 円です。
AtCoder ドリンクを飲むため支払う合計金額の最小値を出力してください。
解法 (C++)
最小値を求める問題では、最小値を表す変数 res
を用意してあげて、
res = min(res, (最小かもしれない値の候補));
というように、値 res
を更新していくとよいでしょう。他の方法として、
if (res > (最小かもしれない値の候補)) {
res = 最小かもしれない値の候補;
}
というように、if
文を用いる方法もあるのですが、「不等号の向きがどっちだったっけ......と混乱しやすい」と思います。
それならいっそ、関数 min()
を使ってしまった方が分かりやすいでしょう。
以上を踏まえて、最初に変数 res
を res = P
と初期化してあげて、各料理を支払ったときの価格である Q + D[i]
と順に比較していけばよいでしょう。
コード例 (C++)
ここでは、価格 を、サイズ の vector<int>
型変数として受け取っています。この場合、価格は D[1]
, D[2]
, ..., D[N]
ではなく、D[0]
, D[1]
, ..., D[N-1]
となることに注意しましょう。
#include <bits/stdc++.h> using namespace std; int main() { // 入力を受け取る int N, P, Q; cin >> N >> P >> Q; vector<int> D(N); for (int i = 0; i < N; ++i) cin >> D[i]; // まず P 円を求める最小値の初期値に設定しておく int res = P; // Q + D[i] を比べていく for (int i = 0; i < N; ++i) { // もし res よりも、Q + D[i] の方が小さい場合は更新する res = min(res, Q + D[i]); } cout << res << endl; }