Deadline:2018.04.22 22:00 pmhtml
课程地址:http://www.icourse163.org/course/PKU-1002029030
学习前两章内容(从C到C++、类和对象基础),并完成相应的章节测验,而后将课程进度截图上传到蓝墨云班课。c++
做业地址:https://pintia.cn/problem-sets/985353690216259584/problemsgit
通过了寒假的两次编程训练,你们大多对于电梯调度已有了本身的思路,但同窗们的代码还是C语言面向过程的风格。从本次做业开始,咱们将以面向对象程序设计的角度,从新思考这个问题。github
(注意:本次题目需求与寒假时有所不一样!)算法
一栋3层的大楼(楼层编号0-2),设有一台无限载重的电梯,初始时电梯停在0层。电梯移动1层的耗时为1,在某一层停靠的耗时为1(时间初始为0)。电梯不容许未仆先知,必须在时间到了以后才能开始响应这条请求。
为了使得电梯完成接送全部乘客的运行时间最短,请你编写一个程序来进行电梯调度。编程
输入文件的文件名为 input.txt
,其中:第一行为一个非负整数N
,表明乘客的请求数量;接下来N行,描述了这N个请求的信息,格式为请求时刻 起始楼层数 去往楼层
。
保证请求时刻
是递增的,且同一时刻同一楼层只会有一名乘客发出请求(也即不会出现同时且同楼层的多行输入)。函数
/*input example*/ 2 0 1 2 1 2 1
输出调度决策,输出文件的文件名为output.txt
,其中:每一行的输出格式为时刻 停靠楼层
。(初始时停在0层的状态不输出)
注意:“时刻”指的是在某层楼停靠的时刻,且不算入在该层的停靠时间。学习
/*onput example*/ 1 1 3 2 5 1
1.新建一个C++项目(名字取为Elevator-scheduling)。测试
2.在这个项目里添加一个Elevator类,用来描述电梯。设计
该类的成员变量和成员函数以下:(做为参考)
member:
- queue < int > destinationQueue; //目的地队列
- int currentFloor; //当前位置
- int indicator; //运行方向
function:
- goToFloor() //前往队列首的楼层
- stop() //停靠在当前楼层
- updateDestinationQueue() //更新目的地队列
5.在这个项目里新建一个cpp文件,在其main里面读取文件输入、建立Elevator对象以及输出等等。(本次做业旨在熟悉c++的类和对象以及文件读写,可暂不考虑调度算法)
6.写一篇随笔,附上类图,并描述整个过程当中碰到的全部困难(卡在哪些地方),以及解决的过程。要求在博客开头贴出项目的github地址。
(类图可参考北航同窗的优秀做业:http://www.cnblogs.com/HansBug/p/8694939.html)
本次代码依然须要上传Github。代码必须遵循必定的代码规范,要有注释,可读性尽量好。
提交到Github上的项目均须要创建一个名字为BIN的文件夹,里面必须含有可执行文件(以exe为后缀),相关的依赖库,以及输入和输出文件。请注意如下两点:
./output.txt
)/ Elevator-scheduling / main.cpp / elevator.cpp / elevator.h ... / BIN / elevator.exe / input.txt / output.txt / Lib.dll (exe运行须要的动态连接库文件,能够没有)
注意:在下一次的做业中,将引入匿名互测。
互测规则以下: