計算式の場合分け
解決したいこと
rubyを使った計算式の場合分けをしたいです
例:
100円の品がある
5個買うと、それが自動でセット料金扱い(400円)となる
3個買う場合
300円
7個買う場合
セット料金400円+単品2個で200円=600円
10個買う場合
セット料金400円2個で800円
0
rubyを使った計算式の場合分けをしたいです
例:
100円の品がある
5個買うと、それが自動でセット料金扱い(400円)となる
3個買う場合
300円
7個買う場合
セット料金400円+単品2個で200円=600円
10個買う場合
セット料金400円2個で800円
初めまして.
質問にありますように,計算式の場合分けを書いてみました.
num = gets.to_i
value = 0
if num == 5 then
value = 400
elsif num == 3 then
value = 300
elsif num == 7 then
value = 600
elsif num == 10 then
value = 800
end
puts value
しかし,これだと入力が3
,5
,7
,10
の場合しか対処できません.
不等式を用いてもう少し扱う範囲を大きくしてみます.
すると
num = gets.to_i
value = 0
if num < 5 then
value = 100 * num
elsif num == 5 then
value = 400
elsif num < 10 then
value = 400 + 100 * (num - 5)
elsif num == 10 then
value = 800
end
puts value
のようになります.これであれば0
から10
までの入力に対して,適切な価格を出してくれます.
では,もし入力が100
まであったら,この条件分岐をあと何行書くことになるのでしょうか...
途方もありませんので,条件分岐という思考から少し離れて,次のように書くことにしましょう.
num = gets.to_i
value = 400 * (num / 5) + 100 * (num % 5)
puts value
この書き方だと,品物の個数に応じていくらでも対応することができます.
具体的には,num / 5
の演算でセット価格になる個数で,
そうするようにまとめられなかった余りの個数がnum % 5
になっているというわけです.
Rubyでは,割り算/
の演算は切り捨てで行われ,また余りを求めるのは%
で行うことができます.従って,それぞれの演算の結果は
num | num / 5 | num % 5 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 0 | 2 |
3 | 0 | 3 |
4 | 0 | 4 |
5 | 1 | 0 |
6 | 1 | 1 |
7 | 1 | 2 |
8 | 1 | 3 |
9 | 1 | 4 |
10 | 2 | 0 |
11 | 2 | 1 |
となっていきます.num / 5
と書いて得られたセットにした個数
にセット価格400
を掛け,またnum % 5
と書いて得られたセットにならなかった個数
に単価100
を掛けて足しているということになります.
@POSO
Questioner