|
本帖最后由 libtyger 于 2010-12-1 17:09 编辑
回复 3# 立夏
1、“结余”不太理解是干啥的。是按整数付钱后多出来的部分么?
对,因为每次并不一定所有的饭钱都会花完,会有几块钱的结余吧。
2、“重置”不管用
cc @chada, 另寻对js比较熟的同学帮忙~
3、貌似没有设定学生半价或约半价?计算结果好像只考虑了总数对上就行。如总费用103,学生2人,成人9人。计算结果是学生付2元,成人11元
这里需要解释一下算法了,算法是按照以下规则设置的:
(1) 按照学生半价的原则(小数全部向上取整数),保证参加活动的志愿者支付的总额为略大于消费总额的最小值;
(2) 如剩余数额大于某一组人数,优先向学生退款;
(3) 如果学生组和工作组人数差距较大,则人数较少的组具有退款优势(因为此时可能已经不够向人数多的组每人退一块钱)。
请大家对这种算法思路进行pk~~
所以立夏的例子在这里计算过程如下:
(1) 最初每个学生付5.15元、成人付10.30元;然后备选的答案在(5, 11)、(6, 10)、(6, 11)之间选择。
(2) 选择大家所需支付总额最少、又要超出饭钱的答案(5, 11),此时收上来的钱数是109,多出6块钱。
(3) 此时的6块钱要么由负责人收着,要么退还给某个组。退给成人组9人不太合适,只能退给学生组,每人退了三块钱。于是最后答案就是(2, 11)。
上面第三步骤考虑的是:让此次参加活动的所有人支付的钱数目最少(即带队人保留尽可能少的余额)。
在两组人数差距比较大时,学生组和成人组之间可能不是严格的半价关系,但同组之间是严格相等的。
可能是我们想的比较复杂了~请大家继续pk~
话说本来大家认为很简单的算账,查尔斯、小蜜蜂、太哏儿几个还是颇费了翻周折的。难为小怀和算账的同学每次折腾那么久啦~~~ |
|