模拟排队问题 C++实现

本文通过模拟两种排队场景,对比了固定队伍与叫号系统的排队时间,发现叫号系统能有效减少平均等待时间,从9分钟降至7.6分钟,提示银行、医院等场所采用叫号系统以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模拟排队场景,计算排队时间:

有两名服务员,每人在同一时刻只能为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;
}

对现实生活的启示
银行、医院等场所应采用叫号系统,
而不是直接在各个窗口直接排队,
既保证客户的舒适性,又提高排队效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值