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

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

这个题有多种做法 我写的是时间轴模拟
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
银行排队问题通常涉及到模拟顾客在有多个服务窗口的环境中办理业务的情况,其中可能包括VIP客户专享窗口。在C语言中解决这个问题,可以设计一个简单的程序模型来描述这个场景: 1. 定义结构体:创建`Customer`和`Window`结构体,别表示顾客和窗口,包含字段如ID、服务时间、是否为VIP等。 ```c typedef struct { int id; bool is_vip; time_t service_time; // 服务所需时间 } Customer; typedef struct { int window_num; bool is_vip_window; int customers_in_queue; int processing_customer; // 当前处理的顾客 } Window; ``` 2. 数据结构:使用链表或者数来存储顾客和服务窗口列表。 3. 主函数:初始化窗口和顾客,并设置一个事件循环来模拟服务过程。在这个过程中,需要考虑优先服务VIP客户,以及普通客户按照到达顺序排队。 ```c void process_windows(Window *windows, Customer *customers) { while (!queue_empty(customers)) { // 循环直到所有客户都被服务 // 检查是否有VIP客户,如果有就先处理 if (find_vip_customer(customers)) { serve_vip_window(windows); } else { serve_next_customer(windows, customers); } } } // 辅助函数... ``` 4. 功能函数:实现如上所述的`serve_vip_window()`、`serve_next_customer()`等函数,它们会处理相应的操作,比如从队列中移除已服务的客户,更新窗口状态等。 5. 测试和调试:编写测试用例确保算法按预期工作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值