競技プログラミング

ABC087B – Coins

https://atcoder.jp/contests/abs/tasks/abc087_b

イントロダクション

今回は、AtCoderの問題、「合計金額がちょうどX円になる硬貨の選び方」に取り組んでみます。Swift言語を使用して、数値の特性と基本的なループ処理を利用してこの問題を解決します。

問題の詳細説明

あなたは、500円玉をA枚、100円玉をB枚、50円玉をC枚持っています。 これらの硬貨の中から何枚かを選び、合計金額をちょうどX円にする方法は何通りありますか。同じ種類の硬貨どうしは区別できません。

問題の要素解説

この問題は、全探索とループ処理を理解することで解決できます。500円、100円、50円という3つの選択肢それぞれについて、0枚から所持枚数まで選んだ場合の総和がX円になるパターンを探します。

解答戦略

Swiftでループ処理を用いた全探索の方法を学びます。

  1. 標準入力からA, B, C, Xを読み込みます。
  2. 500円、100円、50円の硬貨について、0枚から所持枚数まで全てのパターンを探索します。
  3. 合計金額がちょうどX円になるパターンの数を出力します。

コードの解説

まず、標準入力からA, B, C, Xを読み込みます。次に、500円、100円、50円の硬貨について、0枚から所持枚数まで全てのパターンを探索します。その総和がX円になるパターンの数を数え上げます。

コード全文

以下にコードの全文を示します:

import Foundation

let A = Int(readLine()!)!
let B = Int(readLine()!)!
let C = Int(readLine()!)!
let X = Int(readLine()!)!

var count = 0
for a in 0...A {
    for b in 0...B {
        for c in 0...C {
            if 500*a + 100*b + 50*c == X {
                count += 1
            }
        }
    }
}
print(count)

考察と最適化

この問題は全探索によりシンプルに解決できます。より複雑なケースでは、動的計画法などのアルゴリズムを用いる可能性があります。

結論

今回の問題はSwiftの基本的なループ処理と全探索を用いて解決しました。競技プログラミングは問題解決スキルを磨くのに非常に役立つと感じています。

コメントとフィードバックの募集

コメントやフィードバックをお待ちしております。お気軽にご意見をお寄せください。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です