POSO
@POSO

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

計算式の場合分け

解決したいこと

rubyを使った計算式の場合分けをしたいです
例:
100円の品がある
5個買うと、それが自動でセット料金扱い(400円)となる
3個買う場合
300円
7個買う場合
セット料金400円+単品2個で200円=600円
10個買う場合
セット料金400円2個で800円

0

1Answer

初めまして.
質問にありますように,計算式の場合分けを書いてみました.

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を掛けて足しているということになります.

0Like

Comments

  1. @POSO

    Questioner

    ありがとうございます!
  2. 解決されたのであれば,本質問をcloseにしていただけるとありがたいです!

Your answer might help someone💌