银行排队问题之单队列多窗口c语言,PTA队列7-3银行排队问题之单队列多窗口服务1.cpp...

#include

#include

#include

using namespace std;

struct Node{

int t; //到达时间

int p; //业务办理时间

};

int main()

{

queue q;

int N;

cin>>N;

int i;

for(i=0;i

{

Node temp;

cin>>temp.t>>temp.p;

if(temp.p>60)

temp.p=60;

q.push(temp);

}

int K;

cin>>K;

int wait=0,tmax=0,sum=0; //等待时间wait,等待最长时间tmax,总等待时间sum

int win[80]={0},num[80]={0}; //每个窗口的等待时间win,办理业务人数num

while(!q.empty()) //遍历队列q(三次一循环)

{

int flag=0,tmin=1000000,imin=0; //最小等待时间tmin,最小下标i

for(i=0;i

{

if(win[i]<=q.front().t) //排序顾客到达时间

{

win[i]=q.front().t+q.front().p; //当前窗口的事物办理时间

num[i]++; //人数加一

q.pop(); //出队

flag=1;

break;

}

if(tmin>win[i])

{

tmin=win[i]; //交换值

imin=i; //记录当前下标

}

}

if(flag==0) //

{

wait=win[imin]-q.front().t; //当前窗口的等待时间

win[imin]+=q.front().p; //这里的win[imin]加p而不是加wait

if(tmax

tmax=wait; //所有中的最长等待时间

sum+=wait;//求总等待时间

num[imin]++; //求每个窗口的人数

q.pop();

}

}

int len=win[0]; //最后完成时间

for(i=0;i

{

if(len

len=win[i];

}

printf("%.1f %d %d\n",sum*1.0/N,tmax,len);

for(i=0;i

{

cout<

if(i!=K-1)

cout<

else

cout<

}

return 0;

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值