利用C++的栈方法编写程序:设停车场内只有一个可以停放n辆汽车的狭长通道,且只有一个大门可以供汽车进出,编写停车场管理程序,使其具有如下功能: 1.汽车在停车场内按车辆到达先后顺序停车; 2.停车场已满,在候车场候车; 3.一旦有车离开,候车场第一辆车开入停车场; 4.当停车场有车离开时,在它之后进入的车辆要先离开,待该车开出停车场后,其它车辆再按原次序进入车场; 5.每辆汽车离开停车场时按停车时间长短缴纳费用;
时间: 2024-02-28 13:55:13 浏览: 55
设停车场内只有一个可停放n辆汽车的长通道的停车场程序
4星 · 用户满意度95%
好的,我可以帮你解决这个问题。以下是我给出的C++停车场管理程序代码。
```c++
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
struct Car {
int id;
int parkTime;
};
int main() {
int n, m;
cout << "请输入停车场容量n和候车场容量m:" << endl;
cin >> n >> m;
stack<Car> park; // 停车场
queue<Car> wait; // 候车场
int curTime = 0; // 当前时间
while (true) {
cout << "当前时间:" << curTime << endl;
// 判断是否有车要离开停车场
if (!park.empty() && curTime - park.top().parkTime >= 2) {
Car car = park.top();
park.pop();
cout << "车" << car.id << "离开停车场,缴纳停车费用:" << (curTime - car.parkTime) * 2 << "元" << endl;
// 判断是否有车在候车场等待
if (!wait.empty()) {
Car nextCar = wait.front();
wait.pop();
nextCar.parkTime = curTime;
park.push(nextCar);
cout << "车" << nextCar.id << "从候车场入场" << endl;
}
}
// 判断是否有车要进入停车场
if (park.size() < n) {
cout << "请输入车的编号:" << endl;
int id;
cin >> id;
Car car = {id, curTime};
park.push(car);
cout << "车" << id << "进入停车场" << endl;
} else if (wait.size() < m) { // 停车场已满,进入候车场
cout << "停车场已满,请输入车的编号:" << endl;
int id;
cin >> id;
Car car = {id, curTime};
wait.push(car);
cout << "车" << id << "进入候车场" << endl;
} else { // 停车场和候车场都已满
cout << "停车场和候车场都已满,请等待..." << endl;
}
// 判断是否退出程序
cout << "是否退出程序?(y/n)" << endl;
char choice;
cin >> choice;
if (choice == 'y' || choice == 'Y') {
break;
}
curTime++; // 时间流逝
}
return 0;
}
```
该程序中,定义了一个`Car`结构体,用来表示车辆的编号和进入停车场的时间。停车场和候车场分别用栈和队列来实现。当停车场已满时,车辆进入候车场;当停车场有车辆离开时,候车场的第一辆车进入停车场。同时,需要计算每辆车的停车时间,以便缴纳停车费用。
阅读全文