模拟排队场景,计算排队时间:
有两名服务员,每人在同一时刻只能为1名顾客服务。
共10名顾客,其中9人所需服务时间都为1分钟,另外1人需5分钟。
有两种排队方式:
- 第一种为排2队,每队5人,每名服务员服务1队顾客,顾客中途不能换队伍
- 第2种方式为给这10个人发号,按号的顺序接受服务,只要某个服务员空,编号最前的顾客即可接受该服务员的服务
计算这两种排队方式的排队时间:
(即从开始到最后一名顾客结束所需时间,给出均值即可。)
本题无输入,先输出第一种排队方式的结果,然后输出第二种排队方式的结果
//第一种方法的时间为9分钟
//第二种方法的时间为7.6分钟
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main() {
//first solution is 9 min obviously.
//discuss the second queuing way:
int sum = 0, T = 0, f;
int queue_sequence[10] = {0};
for (f = 0; f < 10; ++f) {
T = 0;
//用1在容量为10的数组中标记5分钟的那位客人
queue_sequence[f] = 1;
//先算排在该5分钟客户前面的人花了多少时间
T = f / 2;
T += 5;
//判断该客户是在队伍前面还是后面,不同的排法导致后面的时间不一样
if (f < 5)T += (10 - f - 5) / 2;
sum += T;
queue_sequence[f] = 0;
}
cout << "first solution is 9 min obviously." << endl;
cout << "second solution average time is: " << (double) sum / 10 << " min" << endl;
return 0;
}
对现实生活的启示:
银行、医院等场所应采用叫号系统,
而不是直接在各个窗口直接排队,
既保证客户的舒适性,又提高排队效率。