银行可以无限制地提供3比索和5比索票据任务吗?

时间:2014-07-06 14:19:40

标签: ruby math

我正在进行类似的任务:

银行有3比索和5比索的无限量供应。显示使用这两种类型的票据,银行可以支付大于7的任意数量的比索。

答案是:

银行可以通过支付一张3比索钞票和一张5比索钞票支付8比索。

银行可以通过支付三张3比索票据支付9比索。

银行可以通过支付两张5比索票据支付10比索。

银行可以通过支付3比索票据支付11或更多比索,直到只剩下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 个答案:

答案 0 :(得分:0)

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."