某汽车轮渡口,渡船每次能载 10辆车过江。过江车辆分为客车类和货车类,上渡船的有如下规定:同类车先到先上船;且每上4辆客车,才允许上一辆货车;若等待客车不足4辆,则以货车代替;若无货车等待,允许客车都上船。试写一算法模拟渡口管理。
时间: 2023-06-09 17:05:49 浏览: 159
模拟渡口管理
好的,我明白了,以下是算法模拟渡口管理的实现:
1. 定义两个队列,分别存放客车和货车;
2. 初始化每个队列为空;
3. 循环进行以下操作:
a. 判断当前队列中是否有等待的货车;
b. 如果有,则先让货车上船,如果上了4辆客车,则再让一辆货车上船,否则让等待中的客车上船;
c. 如果没有等待的货车,则让等待中的客车上船;
d. 每次上船10辆车,将上船的车辆从队列中删除;
e. 如果车辆全部上完,则停止循环。
以下是实现代码:
```
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> clientQueue;
queue<int> truckQueue;
int clientNum, truckNum, totalNum;
int clientCount = 0, truckCount = 0;
cout << "请输入客车数量:";
cin >> clientNum;
cout << "请输入货车数量:";
cin >> truckNum;
totalNum = clientNum + truckNum;
//将客车和货车分别放入相应的队列
for(int i=1; i<=clientNum; i++)
{
clientQueue.push(i);
}
for(int i=clientNum+1; i<=totalNum; i++)
{
truckQueue.push(i);
}
//按照规则进行上船
while(!clientQueue.empty() || !truckQueue.empty())
{
int count = 0;
bool isTruck = false;
while(!clientQueue.empty() && count<4)
{
cout << "客车" << clientQueue.front() << "上船" << endl;
clientQueue.pop();
count++;
}
if(count == 4 && !truckQueue.empty())
{
cout << "货车" << truckQueue.front() << "上船" << endl;
truckQueue.pop();
isTruck = true;
}
else if(count<4 && !truckQueue.empty())
{
cout << "货车" << truckQueue.front() << "上船" << endl;
truckQueue.pop();
isTruck = true;
}
while(count<10 && !clientQueue.empty())
{
cout << "客车" << clientQueue.front() << "上船" << endl;
clientQueue.pop();
count++;
}
if(isTruck && count<10 && !clientQueue.empty())
{
cout << "货车等待" << endl;
}
clientCount += count;
truckCount += isTruck ? 1 : 0;
cout << endl;
}
cout << "总共上船客车数量:" << clientCount << endl;
cout << "总共上船货车数量:" << truckCount << endl;
return 0;
}
```
阅读全文