日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-3 银行排队问题之单队列多窗口服务 (25 分)

發(fā)布時(shí)間:2024/7/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-3 银行排队问题之单队列多窗口服务 (25 分) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

7-3 銀行排隊(duì)問題之單隊(duì)列多窗口服務(wù) (25 分)

假設(shè)銀行有K個(gè)窗口提供服務(wù),窗口前設(shè)一條黃線,所有顧客按到達(dá)時(shí)間在黃線后排成一條長龍。當(dāng)有窗口空閑時(shí),下一位顧客即去該窗口處理事務(wù)。當(dāng)有多個(gè)窗口可選擇時(shí),假設(shè)顧客總是選擇編號(hào)最小的窗口。

本題要求輸出前來等待服務(wù)的N位顧客的平均等待時(shí)間、最長等待時(shí)間、最后完成時(shí)間,并且統(tǒng)計(jì)每個(gè)窗口服務(wù)了多少名顧客。

輸入格式:

輸入第1行給出正整數(shù)N(≤1000),為顧客總?cè)藬?shù);隨后N行,每行給出一位顧客的到達(dá)時(shí)間T和事務(wù)處理時(shí)間P,并且假設(shè)輸入數(shù)據(jù)已經(jīng)按到達(dá)時(shí)間先后排好了順序;最后一行給出正整數(shù)K(≤10),為開設(shè)的營業(yè)窗口數(shù)。這里假設(shè)每位顧客事務(wù)被處理的最長時(shí)間為60分鐘。

輸出格式:

在第一行中輸出平均等待時(shí)間(輸出到小數(shù)點(diǎn)后1位)、最長等待時(shí)間、最后完成時(shí)間,之間用1個(gè)空格分隔,行末不能有多余空格。

在第二行中按編號(hào)遞增順序輸出每個(gè)窗口服務(wù)了多少名顧客,數(shù)字之間用1個(gè)空格分隔,行末不能有多余空格。

輸入
9
0 20
1 15
1 61
2 10
10 5
10 3
30 18
31 25
31 2
3

題目分析: 錯(cuò)了幾次,純粹的模擬,注意客人到窗口的時(shí)間和窗口開放時(shí)間的關(guān)系即可,若客人比所有窗口的開放時(shí)間都小,客人就會(huì)進(jìn)最小的那個(gè),到來時(shí)間只要比最小大,從左到右遍歷,第一個(gè)進(jìn)去即可。
你也可以這樣想,假如我早早的來到黃線等候,那么我肯定是等到最近一個(gè)available的窗口,假如我來的比較晚,那么我肯定是從左向右,那個(gè)available就去那個(gè)。

代碼

>#include <bits/stdc++.h> using namespace std; struct consumer {int arr; //arriveint pro; //processint wait; }a[1001]; struct gate {int stt=0; //start timeint n=0; }b[11],ss[11]; bool cmp(struct consumer x,struct consumer y) {return x.wait>y.wait; } bool cmmp(struct gate x,struct gate y) {return x.stt>y.stt; } int main() {int n,ar,pr;double waitsum=0;cin>>n;for (int i=0;i<n;i++){cin>>ar>>pr;if (pr>60) pr=60;a[i].arr=ar;a[i].pro=pr;}int k,count=0;cin>>k;while (count<n){ //到的時(shí)間比所有窗口的stt都晚,就進(jìn)入第一個(gè)窗口,否則進(jìn)入第一個(gè)stt最小的窗口. // for (int i=0;i<k;i++) // { // printf("%d的開始時(shí)間是%d\n\n",i,b[i].stt); // }int t=0;for (int i=1;i<k;i++){if (b[i].stt<b[t].stt){t=i;}}if (a[count].arr<=b[t].stt){b[t].n++;a[count].wait=b[t].stt-a[count].arr;waitsum+=a[count].wait;b[t].stt+=a[count].pro;count++;}else if (a[count].arr>b[t].stt){int appr;for (int i=0;i<k;i++){if (a[count].arr>=b[i].stt){appr=i;break;}}b[appr].n++;a[count].wait=0;b[appr].stt=a[count].arr+a[count].pro;count++;}}int sss=0;for (int i=0;i<k;i++){ss[sss++].n=b[i].n;}sort(a,a+count,cmp);sort(b,b+k,cmmp);printf("%.1lf %d %d",waitsum/n,a[0].wait,b[0].stt);printf("\n");printf("%d",ss[0].n);for (int i=1;i<k;i++){printf(" %d",ss[i].n);} }

總結(jié)

以上是生活随笔為你收集整理的7-3 银行排队问题之单队列多窗口服务 (25 分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。