ポイントカード機能その2
問題
とあるお肉屋さんではポイントカードが導入されていて、買い物をするたびに購入金額に応じたポイントがたまります。 加算されるポイントは次の 3 つのルールに従って決定されます。
1. 通常は購入金額の1%(小数点以下切り捨て)とする
2. 4のつく日は購入金額の4%(小数点以下切り捨て)とする
3. 29のつく日は購入金額の29%(小数点以下切り捨て)とする
最終的にポイントカードに何ポイントあるか出力してください。(小数点以下切り捨て)
入力値について
入力は以下のように与えられます。
- N #各買い物の数
- day_1 plice_1 #1回目の買い物の日付 day_1 日, 購入金額 plice_1 円
- day_2 plice_2 #2回めの買い物の日付 day_2 日, 購入金額 plice_2 円
- …
- day_N plice_N #N枚目のレシートの日付 day_N 日, 購入金額 plice_N 円
1行目には今月分の買い物の回数を表す整数 N が入力されます。
続く N 行には各買い物の情報が入力されます。
与えられる入力値
5
2 1000
14 2000
15 4000
24 3000
29 29000
期待する出力
8660
コードと解説
#1行目の入力値を受け取る n = gets.to_i #ポイントは最初は0なので0で初期化する point = 0 #n回繰り返す n.times do |i| #2行名以降の入力値を受け取る day,plice = gets.split.map(&:to_i) #4のつく日の処理を書く if day == 4 || day == 14 || day == 24 #4%なので先に計算してから.floorで小数点以下を切り捨てる point += (plice.to_f / 100) * 4.floor #29日の処理を書く elsif day == 29 #29%なので先に計算してから.floorで小数点以下を切り捨てる point += (plice.to_f / 100) * 29.floor #普通の日は1%なので先に計算してから.floorで小数点以下を切り捨てる else point += (plice.to_f / 100).floor end end #ポイントを出力する puts point.to_i