我正在编写模拟单台电梯运动的代码。这对我来说是个问题,而且很简单,因为用例得到了正确的解释。因此,该问题包含以下数据:
inputFloors :所有楼层的电梯都应该到。{5,2,9,3,8,1} currentFloor :电梯站立/用户进入电梯的当前楼层。6方向:电梯运动方向,如上或下。
现在,由于用户是在6楼进入,所以电梯的路线应该是5,3,2,1,8,9。这意味着电梯应该先从较小的楼层降下来,然后按升序上升。类似地,如果用户想要上升,那么路由应该是8、9、5、3、2、1。
我编写了这段代码,在我看来,它是一个非常简单的用例。但我想看看有没有更好的方法。我正在整理我的c++基础知识,所以这是我能想到的最好的解决方案。
我的守则:
std::vector<int> singleElevatorSystem (int inputFloors[], int size, int currentFloor, string direction) {
std::vector<int> High, Low;
for (int i = 0; i < size; i++) {
if (currentFloor < inputFloors[i]) {
High.push_back (inputFloors[i]);
} else if (currentFloor > inputFloors[i]) {
Low.push_back (inputFloors[i]);
}
}
std::sort (High.begin(), High.end());
std::sort (Low.begin(), Low.end());
if (direction.compare("UP") == 0) {
High.insert(High.end(), Low.rbegin(), Low.rend());
return High;
} else if (direction.compare("DOWN") == 0) {
std::reverse (Low.begin(), Low.end());
Low.insert (Low.end(), High.begin(), High.end());
return Low;
}
}
int main () {
int inputFloors[] = {5, 2, 9, 3, 8, 1};
int currentFloor = 6;
//string direction("UP");
string direction("DOWN");
std::vector<int> outputFloors = singleElevatorSystem (inputFloors, 6, currentFloor, direction);
std::cout << "Elevator will stop at requested floors in sequence : ";
for (int i = 0; i < 6; i++) {
std::cout << outputFloors.at(i) << " ";
}
std::cin.get();
return 0;
}我硬编码数组的大小和当前的楼面值。
有任何评论或更新吗?
发布于 2016-02-09 05:53:09
作为一项C++学习练习,在本例中,创建Elevator类将使您受益。使它成为一个类,它将当前层和方向作为数据成员(这些是电梯的当前状态),并将输入层作为输入并返回输出层的函数PlanRoute。
H文件将如下所示:
class Elevator {
public:
Elevator();
void setCurrentFloor(int currentFloor);
void setDirection(bool goingDown);
std::vector<int> planRoute(const std::vector<int>& inputFloors)
private:
bool goingDown;
int currentFloor;
}https://codereview.stackexchange.com/questions/120085
复制相似问题