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 3 years have passed since last update.

お買い物プログラム

Last updated at Posted at 2021-03-29

RPG の道具屋での買い物をシミュレートしてみましょう。
具体的には、最初の所持金と注文履歴から、最終的な残金を計算します。
ただし、注文時に所持金が足りない場合、その注文は無視されます。
入力例 1 では、お金の単位を G として、ある道具屋での単価が下の表のようになっています。

薬草 = 10G
せいすい = 100G
木の棒 = 50G

ここで、初期の所持金が 300 G であり、注文履歴が

  1. やくそう 5 個
  1. せいすい 3 個
  2. きのぼう 1 個
  3. せいすい 1 個
  4. やくそう 3 個

であるため、残金は次のように計算できます。

  1. やくそう 5 個を買える所持金があるので、残金は 300 - 10 × 5 = 250 G
  1. せいすい 3 個を買える所持金はないので、残金は 250 G
  2. きのぼう 1 個を買える所持金があるので、残金は 250 - 50 × 1 = 200 G
  3. せいすい 1 個を買える所持金があるので、残金は 200 - 100 × 1 = 100 G
  4. やくそう 3 個を買える所持金があるので、残金は 100 - 10 × 3 = 70 G

よって、最終的な残金は 70 G です。
このような計算をシミュレートするプログラムを作成してください。

getsに入力されるのは以下の意味をもった数です。

3 #=> アイテム数
10 100 50 #=>  アイテムの値段
300 5 #=> 所持金 買い物をする回数
1 5 #=> 商品番号 買う商品の個数
2 3 #=> 〃
3 1 #=> 〃
2 1 #=> 〃
1 3 #=> 〃

完成したコードがこちら

N = gets.to_i
price = gets.chomp.split(" ").map(&:to_i)

a = gets.chomp.split(" ").map(&:to_i)
shopping = a[1]
money = a[0]

shopping.times do
 order = gets.chomp.split(" ").map(&:to_i)
 order_amount = order[1]
 order_index = order[0] - 1
 total_price = order_amount * price[order_index]

 if money >= total_price
   money -= total_price
 else
 end
 
end

puts money

解答のポイント

  • price(商品の値段)とorder_index(商品番号)を結びつける。

そのまま引数に指定するだけだと[1]を取得してしまうため、予め−1をすることで[0]から取得できるようにする。

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?