日期:2014-05-18  浏览次数:20791 次

请教一个小算法
收费分级算法。使用金卡,先免费2元(免费1小时),超过1小时部分,每小时收费2元,超过3小时部分每小时4元。
现在:dt2为当前时间,dt为入场时间,hours为总时间。int fee为总费用,现在求fee应该算法应该怎么写?  
TimeSpan ts = dt2 - dt;
int hours = (int)ts.TotalHours;



------解决方案--------------------
从最大的3小时算起,然后算剩下的小时,以此类推,最后对金卡单独-2
------解决方案--------------------
其实就是说抄了三小时之后每小时4元,不超的话就是2元
算法文字描述如下:
先判断时间是否大于3小时(不大于的话直接乘以2,金卡减两元(送一小时));
如果大于三小时则(hours-3)*4+6,金卡减2.
------解决方案--------------------
TimeSpan ts = dt2 - dt;
int hours = (int)ts.TotalHours;
int fee = 0;

if (hours > 3)
{
fee = (hours - 3) * 4 + fee;
hours = 3;
}
if (hours > 1 && hours <= 3)
{
fee = (hours - 1) * 2 + fee;
}
------解决方案--------------------
策略模式.