银行排队问题之单队列多窗口加VIP服务 (30 分)

本文介绍了如何通过时间轴模拟解决银行排队问题,涉及单队列多窗口设置及VIP服务。在模拟过程中,利用缓存处理因窗口全满而等待的顾客,当窗口空闲时,优先考虑VIP客户,并按顺序分配普通客户。直至所有顾客被服务且窗口无剩余处理时间。

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

这个题有多种做法 我写的是时间轴模拟
i从0时刻开始循环
首先建立一个缓存区域 用来存放已经到达 但是由于窗口全被占用而被迫排队顾客
对于每一个时刻 遍历每一个窗口 对于被占用的窗口 该窗口的剩余处理时间减一
如果存在窗口空闲(即该窗口的剩余处理时间为0) 并且缓存区域中存在顾客 那么开始操作

  1. 先讨论vip窗口 如果vip窗口为空 并且缓存区域中存在vip客户 那么把缓存区域中的第一个vip客户拿出来放在vip窗口上
  2. 如果vip窗口被占用 或者缓存区域中没有vip客户 那么我们将m个客户进行按照顺序进行窗口分配 m的值为min(空闲窗口的数量,缓存区中客户的数量)

否则不操作 让i继续++
直到队列中的所有客户被分配完并且每个窗口的剩余处理时间均为0 跳出循环

#include<iostream>
#include<queue>
#include<algorithm>
#include<stdio.h>
//平均等待时间、最长等待时间、最后完成时间,并且统计每个窗口服务了多少名顾客
using namespace std;
double ave_time;
double lgt_time;
int last_time;
double person_num[12];
double cost_time[12];
struct person
{
   
    double arrive;
    double cost;
    int vip;
    person():arrive(0),cost(0),vip(0) {
   }
    person operator=(const person& a)
    {
   
        arrive=a.arrive;
        cost=a.cost;
        vip=a.vip;
        return *this;
    }
};
int main()
{
   
    int n;
    int k,v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值