收益计算程序
作者:张雷 邮箱:978750805@qq.com 电话:18844548996
适用范围:仅适用与ThoughtWorks 2017年校园招聘作业。
开发语言:C/C++ 开发环境:Windows Code::Blocks 12.11
程序方法:
(一)int carculateT(string str) 用于计算活动所需场地个数 输入活动 输出场地数 计算规则
T X 订场策略
0 <4 取消活动
0 >=4 共订1个场
1 任意 共订2个场
2或3 >=4 多订一个场
>3 任意 不多订场
(二)int week(string str) 用于计算活动日期计算某年某月某日是星期几 输入活动 输出星期 计算公式
计算星期几的公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
注意:在公式中有个不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算
(三)int pay(string str,int W) 计算活动时间内租用一块场地活动所用的资金。
活动时间先分是周一到周五还是周末另外活动时段可能占两个不同收费时间段也可能一个都要分类分析。
1. 周一到周五:
9:00 ~ 12:00 30元/时
12:00 ~ 18:00 50元/时
18:00 ~ 20:00 80元/时
20:00 ~ 22:00 60元/时
2. 周六及周日
9:00 ~ 12:00 40元/时
12:00 ~ 18:00 50元/时
18:00 ~ 22:00 60元/时
使用方法:
运行程序 输入数据
每一行代表一次活动,其格式为{活动时间yyyy-MM-dd HH:mm~HH:mm} {人数}
一共有未知行数据 结束时 按 Ctrl+z 结束输入。
例如:输入数据
2016-06-02 20:00~22:00 7
2016-06-03 09:00~12:00 14
2016-06-04 14:00~17:00 22
2016-06-05 19:00~22:00 3
2016-06-06 12:00~15:00 15
2016-06-07 15:00~17:00 12
2016-06-08 10:00~13:00 19
2016-06-09 16:00~18:00 16
2016-06-10 20:00~22:00 5
2016-06-11 13:00~15:00 11
^Z
注意结束输入 需要按 Ctrl+z 结束输入
程序输出:
2016-06-02 20:00~22:00 +210 -240 -30
2016-06-03 09:00~12:00 +420 -180 +240
2016-06-04 14:00~17:00 +660 -600 +60
2016-06-05 19:00~22:00 +0 -0 0
2016-06-06 12:00~15:00 +450 -300 +150
2016-06-07 15:00~17:00 +360 -200 +160
2016-06-08 10:00~13:00 +570 -330 +240
2016-06-09 16:00~18:00 +480 -300 +180
2016-06-10 20:00~22:00 +150 -120 +30
2016-06-11 13:00~15:00 +330 -200 +130
Total Income: 3630 一段时间内全部收入
Total Payment: 2470 需要支付场馆费用
Profit: 1160 这段利润
测试样例:程序范例如上不再赘述
一:
2016-10-16 10:00~12:00 8
2016-10-16 13:00~15:00 13
2016-10-16 17:00~20:00 20
2016-10-17 09:00~10:00 3
2016-10-17 10:00~13:00 16
2016-10-17 13:00~16:00 19
2016-10-17 17:00~19:00 23
2016-10-17 19:00~22:00 30
^Z
2016-10-16 10:00~12:00 +240 -160 +80
2016-10-16 13:00~15:00 +390 -200 +190
2016-10-16 17:00~20:00 +600 -510 +90
2016-10-17 09:00~10:00 +0 -0 0
2016-10-17 10:00~13:00 +480 -330 +150
2016-10-17 13:00~16:00 +570 -450 +120
2016-10-17 17:00~19:00 +690 -520 +170
2016-10-17 19:00~22:00 +900 -1000 -100
Total Income: 3870
Total Payment: 3170
Profit: 700
二:
2016-10-11 11:00~13:00 6
2016-10-12 12:00~15:00 7
2016-10-12 17:00~19:00 13
2016-10-13 18:00~20:00 16
2016-10-14 19:00~22:00 19
2016-10-15 09:00~11:00 23
2016-10-15 11:00~13:00 24
2016-10-15 17:00~20:00 25
2016-10-16 13:00~15:00 3
2016-10-16 20:00~22:00 5
2016-10-17 09:00~12:00 12
2016-10-17 20:00~22:00 18
^Z
2016-10-11 11:00~13:00 +180 -160 +20
2016-10-12 12:00~15:00 +210 -300 -90
2016-10-12 17:00~19:00 +390 -260 +130
2016-10-13 18:00~20:00 +480 -480 0
2016-10-14 19:00~22:00 +570 -600 -30
2016-10-15 09:00~11:00 +690 -320 +370
2016-10-15 11:00~13:00 +720 -360 +360
2016-10-15 17:00~20:00 +750 -680 +70
2016-10-16 13:00~15:00 +0 -0 0
2016-10-16 20:00~22:00 +150 -120 +30
2016-10-17 09:00~12:00 +360 -180 +180
2016-10-17 20:00~22:00 +540 -360 +180
Total Income: 5040
Total Payment: 3820
Profit: 1220
验证程序正确性:
以第二个测试样例来验证程序正确性
先计算每个活动所需场地数 在计算小明income 然后场地费用payment 最后利益
n为活动参加人数 t为可以立即确定的场地数 t=n/6 x为剩余人数 求出活动所需场地数T
2016-10-11 11:00~13:00 6 t=1 x=0 T=2 income=30*6=180 payment=30*2+50*2=160 profit=20
2016-10-12 12:00~15:00 7 t=1 x=1 T=2 income=30*7=210 payment=50*2*3=300 profit=-90
2016-10-12 17:00~19:00 13 t=2 x=1 T=2 income=30*13=390 payment=80*2*1+50*2*1=260 profit=130
2016-10-13 18:00~20:00 16 t=2 x=4 T=3 income=30*16=480 payment=80*3*2=480 profit=0
2016-10-14 19:00~22:00 19 t=3 x=1 T=3 income=30*19=570 payment=80*3*1+60*3*2=600 profit=570-600=-30
2016-10-15 09:00~11:00 23 t=3 x=5 T=4 income=30*23=690 payment=40*4*2=320 profit=690-320=360
2016-10-15 11:00~13:00 24 t=4 x=0 T=4 income=30*24=720 payment=40*4*1+50*4*1=360 profit=720-360=360
2016-10-15 17:00~20:00 25 t=4 x=1 T=4 income=30*25=750 payment=50*4*1+60*4*2=680 profit=750-680=70
2016-10-16 13:00~15:00 3 t=0 x=3 T=0 income=0 payment=0 profit=0
2016-10-16 20:00~22:00 5 t=0 x=5 T=1 income=30*5=150 payment=60*1*2=120 profit=150-120=30
2016-10-17 09:00~12:00 12 t=2 x=0 T=2 income=30*12=360 payment=30*3*2=180 profit=360-180=180
2016-10-17 20:00~22:00 18 t=3 x=0 T=3 income=30*18=540 payment=60*3*2=360 profit=540-360=180
则sincome=5040 spayment=3820 profit 1220
实际运算与程序运算相同
本文链接: