日別アーカイブ: 2022年10月10日

TIPS(Ruby:ポイントカード機能その2 特定の日のポイント数をn倍する)

ポイントカード機能その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

https://paiza.io/ja/projects/new

↑こちらにコピペして「実行」で確認できます。

↓このような出力結果になっていればOKです。

※ポイント

.floorで小数点以下を切り捨てることができる