作者:2gua
链接:https://zhuanlan.zhihu.com/p/19848204
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
# encoding: utf-8
# 每个人钱袋子里的收支情况,初始化都从零开始。
wallet = {:boniface => 0, :guest1 => 0, :guest2 => 0, :guest3 => 0, :staff => 0}
# processing_step:处理步骤
# wallet :钱包
# m :金额数组
# step :处理步骤标识
def processing_step(wallet, m, step)
case step
when 1 # 第一步,老板说房费一共30元,所以每人交了10元钱。
wallet.each do |key, value|
if key.match(/^guest/)
wallet[key] += -m[0]
wallet[:boniface] += m[0]
end
end
when 2 # 第二步,老板发现房费是25,让服务员给客人送回5元。服务员自己藏了2,退给每位客人1。
wallet.each do |key, value|
if key.match(/^guest/)
wallet[key] += m[0]
wallet[:boniface] += -m[0]
end
if key.match(/^staff/)
wallet[key] += m[1]
wallet[:boniface] += -m[1]
end
end
when 3 # 根据前一步骤结果,求证是否真是少了1元?负数的为客人支出,正数为店家及店小二收入。
wallet.each do |key, value|
if value >= 0
m[0] += value
else
m[1] += value
end
end
else
end
end
# 数组为每位客人支出10。
processing_step(wallet, [10], 1)
puts "第一步骤结束,收支明细:" + wallet.to_s
# 数组为还给每位客人1,店小二自得2。
processing_step(wallet, [1, 2], 2)
puts "\n第二步骤结束,收支明细:" + wallet.to_s
# 第一个数组值为店家和店小二收入,第二个数组值为客人支出。
account = [0, 0]
processing_step(wallet, account, 3)
puts "\n店家及店小二收入:" + account[0].to_s
puts "三位客人支出(负值表示):" + account[1].to_s
第一步骤结束,收支明细:{:boniface=>30, :guest1=>-10, :guest2=>-10, :guest3=>-10, :staff=>0}
第二步骤结束,收支明细:{:boniface=>25, :guest1=>-9, :guest2=>-9, :guest3=>-9, :staff=>2}
店家及店小二收入:27 三位客人支出(负值表示):-27 [Finished in 0.3s] 收支都是 27 元,收支平衡。29 也罢、30 也罢,都是忽悠人的啊。
作者:2gua 链接:https://zhuanlan.zhihu.com/p/19848204 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。