ThoughtWorks java开发18年秋招笔试题
说明:
* 作业提交截止时间:10月17日12:00
* 可以选用擅长的语言完成,例如C、C++、Java、C#、Javascript、Python、Scala等
* 可以使用第三方库简化代码(如日期,时间、集合操作等)
* 作业的输⼊和输出必须和题目的测试用例输出严格一致
* 作业完成后必须附上 Readme 纯⽂本文档(推荐使用 markdown 排版)
* Readme文档中应描述如何运行单元测试或主程序来证明作业的正确性(至少针对测试⽤用例输入能够得到对应输出)
家庭作业部分
在未来,出租汽车公司已经采用自动驾驶汽车来开展出租车业务。哒哒出行就是这样一家公司,为了提⾼用户体验,公司需要设计一款软件来统计提醒车辆保养情况。汽车保养分为每一万公里保养和定期保养两种,另外汽车除保养之外,达到一定条件,则会进入报废。
每1万公里保养提醒则如下:
* 汽车每跑1万公里(含)就要保养一次,距离1万公里还差500公里(含)的时候就要开始提醒
* 为了简化规则,不需考虑未及时保养或者重复保养的场景,以及不需考虑上次实际保养时间和大修时间
定期保养提醒规则如下:
* 3年以下⻋辆每12个月定期保养一次
* 3年及以上⻋每6个月定期保养一次
* 若车辆有大修,则每3个月就需要定期保养一次
* 定期保养全部提前一个月开始提醒,直到需要保养的那天(含)为止
* 在计算月份时,只需考虑月份,不需考虑日期,如07月31日和8月1日之间也差一个月,在计算年份时,只需要考虑年份,不需考虑月和日,如2016年12月31日和2017年1月1日也认为相差一年。
* 为了简化规则,不需考虑未及时保养或者重复保养的场景,以及不需考虑上次实际保养时间和大修时间
车辆报废规则如下:
* 一般车辆6年(据购买日期加6*365=2190天)开始报废
* 若车辆有大修,报废年限降为3年(据购买日期加3*365=1095天)
* 报废车辆提前一个月开始提醒(提前一个月提醒,不需要考虑日,比如 03月28日 车辆报废,那么 02月01日 即可开始提醒)
注意:
* 如果车辆已经开始提醒报废或已经报废,则无需保养
* 如果车辆同时需要每1万公里保养和定期保养,则按每1万公里保养计
请编写程序,提醒公司相关人员需要保养和报废的车辆。
程序输⼊为字符串,其格式严格规定如下:
* 文本的第一行表示提交日期,识别车辆状况时以该日期作为当前日期。该行格式
为 SubmitDate: {提交日期 yyyy-MM-dd} ,如 SubmitDate: 2030/09/01
* 随后每一行代表一辆汽车。汽车的各种信息使用 | 字符进行分隔,其排列顺序为
{车牌号}|{购买日期}|{品牌名称}|{目前运行公里数}|{有无大修} ;
* 购买日期的格式为 yyyy/MM/dd (如 2026/02/18 );
* 目前运行公里数为整数,不带有除数字之外的其他符号;
* 有无大修的格式为 'T' 或者 'F' ,前者表示有大修,后者表示无大修;
范例:
SubmitDate: 2030/09/01
CAR0001|2025/04/05|Porsche|10000|F
CAR0002|2029/10/14|Porsche|9000|F
CAR0003|2026/08/17|Porsche|13000|F
CAR0004|2027/11/01|BYD|23000|T
CAR0005|2027/01/11|BYD|19500|F
CAR0006|2029/07/01|Audi|10001|T
CAR0007|2028/04/19|Ford|9800|F
CAR0008|2027/07/10|Ford|15000|T
CAR0009|2024/10/22|Ford|90300|F
程序输出:
* 对于前面的输入,相应的输出范例为:
Reminder
==================
* Time-related maintenance coming soon...
Audi: 1 (CAR0006)
Porsche: 1 (CAR0002)
* Distance-related maintenance coming soon...
BYD: 1 (CAR0005)
Ford: 1 (CAR0007)
Porsche: 1 (CAR0001)
* Write-off coming soon...
BYD: 1 (CAR0004)
Ford: 1 (CAR0009)
其中
* Time-related maintenance 指需要提醒定期保养的车辆
* Distance-related maintenance 指需要提醒每1万公里保养的车辆
* Write-off 指需要提醒报废的车辆
* 每一组中的车辆按照品牌升序排序(品牌第一个字母均为大写)
测试用例一
输⼊
SubmitDate: 2030/09/01
CAR0001|2025/04/05|Porsche|10000|F
CAR0002|2029/10/14|Porsche|9000|F
CAR0003|2026/08/17|Porsche|13000|F
CAR0004|2027/11/01|BYD|23000|T
CAR0005|2027/01/11|BYD|19500|F
CAR0006|2029/07/01|Audi|10001|T
CAR0007|2028/04/19|Ford|9800|F
CAR0008|2027/07/10|Ford|15000|T
CAR0009|2024/10/22|Ford|90300|F
输出
Reminder
==================
* Time-related maintenance coming soon...
Audi: 1 (CAR0006)
Porsche: 1 (CAR0002)
* Distance-related maintenance coming soon...
BYD: 1 (CAR0005)
Ford: 1 (CAR0007)
Porsche: 1 (CAR0001)
* Write-off coming soon...
BYD: 1 (CAR0004)
Ford: 1 (CAR0009)
测试用例二
输入
SubmitDate: 2050/05/01
CAR0001|2044/05/01|Volkswagen|65535|F
CAR0002|2044/05/03|BMW|100001|F
CAR0003|2047/05/02|Mercedes-Benz|37789|T
CAR0004|2047/05/03|Honda|59908|T
CAR0005|2049/12/10|Peugeot|49999|F
CAR0006|2046/11/15|Jeep|2000|F
CAR0007|2046/11/16|Jeep|5000|F
输出
Reminder
==================
* Time-related maintenance coming soon...
Jeep: 2 (CAR0006, CAR0007)
* Distance-related maintenance coming soon...
Peugeot: 1 (CAR0005)
* Write-off coming soon...
BMW: 1 (CAR0002)
Honda: 1 (CAR0004)
#Thoughtworks##笔试题目##Java工程师##校招##C/C++#