0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Ruby】お金を最小限の枚数の紙幣・硬貨で支払う式

Posted at

Rubyを使ったアルゴリズムについて学習しています。

今回は、特定の金額を与えられたときに、どのようにそれを最小の枚数の紙幣と硬貨に分けるかを求めていきます。

完成コード

money = 7468
currencies = [10000, 5000, 1000, 500, 100, 50, 10, 5, 1]
result = {}

currencies.each do |currency|
  count = money / currency
  money %= currency
  result[currency] = count
end

puts result

このコードは各紙幣・硬貨で金額を割ってその商(枚数)を得て、それをresultハッシュに保存している。そして、その紙幣・硬貨で金額を割った余りを次の紙幣・硬貨の計算のための金額とする。これを最小の紙幣・硬貨まで繰り返すことで、最小の枚数で金額を分けることができる。

コードの解説

このコードは、ある金額を最小の紙幣と硬貨の枚数で 表すためのプログラム。

  1. 最初に money = 6498 と定義して、分解したい金額を設定してる。
  2. 次に currencies = [10000, 5000,1000,500, 100, 50, 10, 5, 1]と定義して、利用できる紙幣と硬貨の種類を設定してる。
  3. result = {}で、各紙幣と硬貨ごとの枚数を 保存するためのハッシュを初期化してる。
  4. currencies.each do |currencyで、 currencies配列の各要素(紙幣や硬貨の額面) に対して以下の処理を行う。
  5. count = money/currency で、 現在の金額を 現在の紙幣・硬貨の額面で割った商 (いくつ該当の紙 幣・硬貨が使えるか) を計算してる。
  6. money %= currencyで、 現在の金額を現在の紙幣・硬貨の額面で割った余り(次の紙幣・硬貨を使うための残りの金額)を計算してる。
  7. result[currency] = countで、現在の紙幣・硬貨の額面とその枚数をハッシュに保存してる。
  8. 最後に puts result で、各紙幣・硬貨の枚数を出力してる。

ポイント

  • each文を使い、配列の値を一つずつ代入してその下の計算を実施している。

  • a %= b は代入演算子である。 a = a % b と同じ意味。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?