RPG の道具屋での買い物をシミュレートしてみましょう。
具体的には、最初の所持金と注文履歴から、最終的な残金を計算します。
ただし、注文時に所持金が足りない場合、その注文は無視されます。
入力例 1 では、お金の単位を G として、ある道具屋での単価が下の表のようになっています。
薬草 = 10G
せいすい = 100G
木の棒 = 50G
ここで、初期の所持金が 300 G であり、注文履歴が
- やくそう 5 個
- せいすい 3 個
- きのぼう 1 個
- せいすい 1 個
- やくそう 3 個
であるため、残金は次のように計算できます。
- やくそう 5 個を買える所持金があるので、残金は 300 - 10 × 5 = 250 G
- せいすい 3 個を買える所持金はないので、残金は 250 G
- きのぼう 1 個を買える所持金があるので、残金は 250 - 50 × 1 = 200 G
- せいすい 1 個を買える所持金があるので、残金は 200 - 100 × 1 = 100 G
- やくそう 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]から取得できるようにする。