DS队列之银行排队

Posted szu-ds-wys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DS队列之银行排队相关的知识,希望对你有一定的参考价值。

题目描述

 

在银行营业大厅共服务3种客户,类型为ABC,大厅分别设置了3个窗口分别服务三种客户,即每个窗口只服务一种客户。现有一批客户来银行办理业务,每个客户都有类型和办理业务时间。每个窗口按照客户到来的顺序进行服务。

编程实现它们的办理流程,请使用C++自带的queue必须使用队列实现,其他方法0分!

队列queue的用法如下:

1.包含头文件:#include <queue>

2.定义一个整数队列对象:queue<int>  myQe;

3.定义一个整数队列对象数组:queue<int>  myQA[10]; 

4.入队操作:myQe.push(itemp); //把整数itemp进入队列

5.出队操作:myQe.pop();  //把队头元素弹出队列,注意本操作不获取队头元素

6.获取队头元素: itemp = myQe.front(); // 把队头元素放入itemp中,注意本操作不弹出元素

7.判断队列是否为空:myQe.empty();//队列空则返回true,不空则返回false

 

 

 

 

输入

 

第一行输入先输入n表示客户数量

第二行输入每个客户的类型,数据之间用用空格隔开

第三行输入每个客户的办理时间,数据之间用用空格隔开

 

 

 

输出

 

第一行输出A类客户的平均办理时间

第二行输出B类客户的平均办理时间

第三行输出C类客户的平均办理时间

 

 

 

样例输入

8 A B C B C A A A 10 20 30 40 50 60 70 80

样例输出

55 30 40

提示

#include<iostream>
#include<queue>
using namespace std;
int main()
{
    int n;
    cin>>n;
    char *c=new char[n];
    int *t=new int[n];
    for(int i=0;i<n;i++)
        cin>>c[i];
    for(int i=0;i<n;i++)
        cin>>t[i];
    queue<int>QA;
    queue<int>QB;
    queue<int>QC;
    for(int i=0;i<n;i++)
    {
        if(c[i]==A)
        {
            QA.push(t[i]);
        }
        else if(c[i]==B)
        {
            QB.push(t[i]);
        }
        else if(c[i]==C)
        {
            QC.push(t[i]);
        }
    }
    int timeA=0,timeB=0,timeC=0;
    int nA=0,nB=0,nC=0;
    while(!QA.empty())
    {
        timeA+=QA.front();
        QA.pop();
        nA++;
    }
    while(!QB.empty())
    {
        timeB+=QB.front();
        QB.pop();
        nB++;
    }
    while(!QC.empty())
    {
        timeC+=QC.front();
        QC.pop();
        nC++;
    }
    timeA/=nA;
    timeB/=nB;
    timeC/=nC;
    cout<<timeA<<endl;
    cout<<timeB<<endl;
    cout<<timeC<<endl;
    delete []c;
    delete []t;
    return 0;
}

以上是关于DS队列之银行排队的主要内容,如果未能解决你的问题,请参考以下文章

PTA 银行排队问题之单队列多窗口加VIP服务 队列+模拟

PTA 银行排队问题之单队列多窗口服务

用队列管理解决食客的排队问题

数据结构银行排队取票机的原理是什么?详解队列

求解C++模拟银行排队问题

数据结构之队列(转载)