假設某銀行網點有五個服務視窗,分別為三個對私、乙個對公和乙個外幣視窗。銀行服務的原則是先來先服務。通常對私業務人很多,其它視窗人則較少,可臨時改為對私服務。假設當對私視窗等待服務的客戶(按實際服務視窗)平均排隊人數超過(大於或等於)7人時,等待客戶將可能有抱怨,影響服務質量,此時銀行可臨時將其它視窗中乙個或兩個改為對私服務,當客戶少於7人時,將立即恢復原有業務。設計乙個程式用來模擬銀行服務。
說明:1. 增加服務視窗將會增加成本或影響其它業務,因此,以成本增加或影響最小為原則來增加服務視窗,即如果增加乙個視窗就能使得按視窗平均等待服務人數小於7人,則只增加乙個視窗。一旦按視窗平均等待服務人數小於7人,就減少乙個所增加的視窗。
2. 為了簡化問題,假設新到客戶是在每個服務週期開始時到達。
3. 當等待服務人數發生變化時(新客戶到達或有客戶已接受服務),則及時計算按實際服務視窗平均等待服務人數,並按相應策略調整服務視窗數(增加或減少額外的服務視窗,但對私視窗不能減少)。注意:只在獲取新客戶(不管到達新客戶數是否為0)時或已有客戶去接受服務時,才按策略調整服務視窗數。進一步講,增加服務視窗只在有客戶到達的週期內進行(也就是說增加視窗是基於客戶的感受,銀行對增加視窗是不情願的,因為要增加成本,一旦不再有新客戶來,銀行是不會再增加服務視窗的);一旦有客戶去接受服務(即等待客戶減少),銀行將根據策略及時減少服務視窗,因此,在每個週期內,有客戶去接受服務後要馬上判斷是否減少服務視窗(因為能減少成本,銀行是積極的)
本問題中假設對公和對外幣服務視窗在改為對私服務時及服務期間沒有相應因公或外幣服務新客戶到達(即正好空閒),同時要求以增加成本或影響最小為前提,來盡最大可能減少對私服務客戶等待時間。
【輸入形式】
首先輸入乙個整數表示時間週期數,然後再依次輸入每個時間週期中因私業務的客戶數。注:乙個時間週期指的是銀行處理一筆業務的平均處理時間,可以是一分鐘、三分鐘或其它。例如:
62 5 13 11 15 9
說明:表明在6個時間週期內,第1個週期來了2個(序號分別為1,2),第2個來了5人(序號分別為3,4,5,6,7),以此類推。
【輸出形式】
每個客戶等待服務的時間週期數。輸出形式如下:
使用者序號 : 等待週期數
說明:客戶序號與等待週期數之間用符號:分隔,冒號(:)兩邊各有乙個空格,等待週期數後直接為回車。
【樣例輸入】
2 5 13 11
【樣例輸出】
1 : 0
2 : 0
3 : 0
4 : 0
5 : 0
6 : 1
7 : 1
8 : 0
9 : 1
10 : 1
11 : 1
12 : 1
13 : 2
14 : 2
15 : 2
16 : 3
17 : 3
18 : 3
19 : 4
20 : 4
21 : 3
22 : 4
23 : 4
24 : 4
25 : 5
26 : 5
27 : 5
28 : 6
29 : 6
30 : 6
31 : 7
【樣例說明】
樣例輸入表明有四個時間週期,第乙個週期來了2人(序號1-2);第二個週期來了5人(序號3-7);第三個週期來了13人(序號8-20);第四個週期來了11人(序號21-31)。由於第乙個時間週期內只來了2人,銀行(有三個服務視窗)能及時提供服務,因此客戶等待時間為0;第二個時間週期內來了5人,銀行乙個週期內一次只能服務3人,另有2個在下個週期內服務,因此等待時間為1,其它類推。
資料結構的這個問題大一的時候就沒想通,到了大三還是沒想通。
請教了一些同學後才知道,原來是我的思路出了問題。
雖然說有3+2個服務視窗,但是我們其實可以把所有人當作乙個佇列,每次就是前幾個客人可以得到服務,而當佇列的人超過了21人(即只有3個視窗時,平均每個視窗的等待人數會超過7人時,就開1~2個視窗),然後就可以每次服務4~5人了。
而文章題目的提出的疑問,其實就是12號客人是在第第3個時間週期到達的,第4個時間週期又來了11人,而第4個時間週期還有總共12人在等待,所以就需要新開乙個視窗,這時候排在隊伍前面的是9,10,11,12號客人,12號客人就可以得到服務,相當於他是在第3個時間週期來的,在第4個週期走,所以就只等待了1個時間週期
離散事件模擬 銀行排隊
某銀行有四個視窗接待客戶,每個視窗在某個時刻只能接待乙個客戶,人數多時則需要進行排隊,剛進來的客戶,視窗無人則進行業務辦理,有人則排隊,排在人數最少的隊伍後面。問題 計算在銀行關閉之前,計算客戶在銀行逗留的平均時間 用c寫的,給書上 的實現了下,如下 include include include ...
離散事件模擬 銀行排隊
假設不存在插隊的情況,並且人人都會選擇排到人數最少的那乙個視窗排隊。假設人們陸續到達銀行,不會同時到達銀行。如下 include include include define max size 10000 佇列的初始化長度 define end time 10000 銀行關門時間 using nam...
離散事件模擬 銀行排隊時間模擬
在資料結構中有個講述如何模擬銀行排隊,最終算出每個人平均的逗留時間。這是需要資料結構的知識。將銀行的每個視窗看成是乙個佇列,那麼對於每次來乙個人,都需要從最短的佇列進行排隊。其實更優秀的做法是從最短的等待時間佇列來排隊 這裡的做法是這樣的,首選在乙個佇列中插入乙個人,整個事件是事件驅動的,每次去檢查...