У банка есть неограниченный запас банкнот достоинством в 3 песо и 5 песо задача?

#ruby #math

#ruby #математика

Вопрос:

Я работаю над заданием, которое выглядит следующим образом:

У банка есть неограниченный запас банкнот достоинством в 3 песо и 5 песо. Покажите, что этими двумя типами банкнот банк может выплатить любое количество песо, превышающее 7.

Ответ таков:

Банк может заплатить 8 песо, оплатив одну банкноту достоинством в 3 песо и одну банкноту достоинством в 5 песо.

Банк может заплатить 9 песо, оплатив три банкноты достоинством в 3 песо.

Банк может заплатить 10 песо, оплатив две банкноты достоинством в 5 песо.

Банк может выплатить 11 или более песо, выплачивая банкноты достоинством в 3 песо до тех пор, пока для выплаты не останется всего 8, 9 или 10 песо, а затем используя одну из вышеуказанных стратегий. (Если вычесть тройки из числа 11 или больше, то в конечном итоге получится одно из 8, 9 или 10.)

И я пытаюсь реализовать эту функциональность в Ruby программе.

До сих пор я делал следующее:

 class Money

  def initialize(price)
    @price = price.to_i
    validate(@price)
  end


  def validate(price)
    if price >= 8
      calculate(price)
    elsif price < 8
      puts "Minimum ammount is 8 pesos"
    end
  end


  def calculate(price)
    if price%5 === 0
      fives  = price/5
      threes = 0
    end

    result(fives, threes)
  end


  def result(fives, threes)
    puts "#{fives} five peso notes, #{threes} three peso notes."
  end

end


m = Money.new(ARGV.first)
  

Не могли бы вы, пожалуйста, помочь мне вставить эту математическую задачу в программу? Спасибо.

Комментарии:

1. В основном у вас все получилось, хотя я готов поспорить, что тройное равенство === должно было быть двойным ==

2. Подумайте о r = price % 3 . Для остатка возможны три значения r : 0, 1 или 2. Ноль означает, что вы уже знаете решение. Вам просто нужно придумать способ написания кода, который обрабатывает 1 и 2.

Ответ №1:

 def count(price)
  t = 0
  if price >= 11
    t = (price - 8) / 3
    price -= t * 3
  end
  if price == 8
    [t   1, 1]
  elsif price == 9
    [t   3, 0]
  elsif price == 10
    [t, 2]
  else
    fail "price too small"
  end
end

threes, fives = count(42)
puts "#{fives} five peso notes, #{threes} three peso notes."