LoginSignup
1
0

More than 1 year has passed since last update.

[Ruby] AtCoder過去問 B - Coins

Posted at

はじめに

AtCoder過去問をrubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください↓

B - Coins

まずは入力を受け取ります。
改行されているのでreadlinesを使って受け取ります。

a, b, c, x = readlines.map(&:to_i)

繰り返し文を使うので変数countを用意して0を代入しておきます。
今回のポイントは繰り返し文をネストしていくということです。

今回は先に回答を記述します。↓

a, b, c, x = readlines.map(&:to_i)

count = 0
(0..a).each do |i|
  (0..b).each do |j|
    (0..c).each do |k|
      if i * 500 + j * 100 + k * 50 == x
        count += 1
      end
    end
  end
end

puts count

三階層のネストをしています。
ネストにすることにより一番階層の深いkに0からcまでの値が全て入り終わるまでその一つ上の階層jの値は変わりません。

iとjを固定してkを全て試し、jに一つ変化を加えてまたiとjを固定してkを全て回して。。。
ということを繰り返します。

そうすることにより、手持ちの硬貨を使った、考えうる全てのパターンで計算しています。
その中でxと同じ金額になった時はcountに+1しています。

全てのパターンで計算し終わった後に、xと同じ金額になったパターンの数=答えです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0