横向拖动的网站,wordpress开发单页面,制作网站公司,wordpress列表页7-3 银行排队问题之单队列多窗口服务 (25 分)
假设银行有K个窗口提供服务#xff0c;窗口前设一条黄线#xff0c;所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时#xff0c;下一位顾客即去该窗口处理事务。当有多个窗口可选择时#xff0c;假设顾客总是选择编号…7-3 银行排队问题之单队列多窗口服务 (25 分)
假设银行有K个窗口提供服务窗口前设一条黄线所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时下一位顾客即去该窗口处理事务。当有多个窗口可选择时假设顾客总是选择编号最小的窗口。
本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间并且统计每个窗口服务了多少名顾客。
输入格式:
输入第1行给出正整数N≤1000为顾客总人数随后N行每行给出一位顾客的到达时间T和事务处理时间P并且假设输入数据已经按到达时间先后排好了顺序最后一行给出正整数K≤10为开设的营业窗口数。这里假设每位顾客事务被处理的最长时间为60分钟。
输出格式:
在第一行中输出平均等待时间输出到小数点后1位、最长等待时间、最后完成时间之间用1个空格分隔行末不能有多余空格。
在第二行中按编号递增顺序输出每个窗口服务了多少名顾客数字之间用1个空格分隔行末不能有多余空格。 输入 9 0 20 1 15 1 61 2 10 10 5 10 3 30 18 31 25 31 2 3 题目分析 错了几次纯粹的模拟注意客人到窗口的时间和窗口开放时间的关系即可若客人比所有窗口的开放时间都小客人就会进最小的那个到来时间只要比最小大从左到右遍历第一个进去即可。 你也可以这样想假如我早早的来到黄线等候那么我肯定是等到最近一个available的窗口假如我来的比较晚那么我肯定是从左向右那个available就去那个。
代码
#include bits/stdc.h
using namespace std;
struct consumer
{int arr; //arriveint pro; //processint wait;
}a[1001];
struct gate
{int stt0; //start timeint n0;
}b[11],ss[11];
bool cmp(struct consumer x,struct consumer y)
{return x.waity.wait;
}
bool cmmp(struct gate x,struct gate y)
{return x.stty.stt;
}
int main()
{int n,ar,pr;double waitsum0;cinn;for (int i0;in;i){cinarpr;if (pr60) pr60;a[i].arrar;a[i].propr;}int k,count0;cink;while (countn){ //到的时间比所有窗口的stt都晚就进入第一个窗口否则进入第一个stt最小的窗口.
// for (int i0;ik;i)
// {
// printf(%d的开始时间是%d\n\n,i,b[i].stt);
// }int t0;for (int i1;ik;i){if (b[i].sttb[t].stt){ti;}}if (a[count].arrb[t].stt){b[t].n;a[count].waitb[t].stt-a[count].arr;waitsuma[count].wait;b[t].stta[count].pro;count;}else if (a[count].arrb[t].stt){int appr;for (int i0;ik;i){if (a[count].arrb[i].stt){appri;break;}}b[appr].n;a[count].wait0;b[appr].stta[count].arra[count].pro;count;}}int sss0;for (int i0;ik;i){ss[sss].nb[i].n;}sort(a,acount,cmp);sort(b,bk,cmmp);printf(%.1lf %d %d,waitsum/n,a[0].wait,b[0].stt);printf(\n);printf(%d,ss[0].n);for (int i1;ik;i){printf( %d,ss[i].n);}
}