一、題目
二、思路
題意:模擬排隊,但和實際排隊的區別在於:
思路:模擬排隊,記錄消費者辦理結束所需的總時間(以分鐘為單位,最後轉換為時刻,由等待時間、辦理時間組成),若等待時間wt>540,則給予sorry;否則,根據總時間sum算出相應時刻;
注意:當兩個視窗同樣長且均未滿時,要同時入隊消費者,使之隊滿(第5個測試點考察的內容);
這裡的隊滿的條件是隊長len為m;
三、**
#include
//結構體
typedef
struct
customer;
customer line[20]
[11], wait[
1001];
//line[i]代表第i+1個視窗所排的隊,wait儲存所有客戶
//qf指向隊頭,qr指向隊尾,qf[20]、qr[20]指向wait佇列的隊頭、隊尾
int n, m, k, q, qf[21]
, qr[21]
, len[20]
;//求隊長
intlenq
(int i)
//求所有視窗中最長的隊的長度
intmaxlen()
return max;
}//判斷隊空否
intempty
(int i)
//判斷隊滿否
intfull
(int i)
//判斷是否所有的視窗都排滿了
intallfull()
}return1;
}//辦理過程
void
processq()
for(i =
0; i < n; i++)if
((!empty
(i))
&&(line[i]
[(qf[i]+1
)%11]
.st < min)
) min = line[i]
[(qf[i]+1
)%11]
.st;
//將當前所有視窗隊首人員的st都減去最小的st,隊中其他人的等待時間都加上最小的st
for(i =
0; i < n; i++
)//尋找所有視窗中隊首客戶的st為0的,並將其出隊
for(i =
0; i < n; i++)}
//黃線外的等待人員的等待時間也增加if(
!empty(20
))}//等待人員入隊
void
changeq()
}//加入最短的隊if(
(!full
(obj))&&
(!empty(20
)))}
intmain()
//再首次填充視窗
j =0;
for(i =
0; i < n * m; i++)}
//若最長的隊非空,則一直處理
l =maxlen()
;while
(l !=0)
//開始輸出
for(i =
0; i < q; i++
) sum = wait[s]
.pt + wait[s]
.wt;if(
(wait[s]
.wt >=
540)
||(s>k)
)else
}return0;
}
PAT甲級真題1153
pat 准考證號由 44 部分組成 第 11 位是級別,即 t 代表頂級 a 代表甲級 b 代表乙級 第 2 42 4 位是考場編號,範圍從 101101 到 999999 第 5 105 10 位是考試日期,格式為年 月 日順次各佔 22 位 最後 11 1311 13 位是考生編號,範圍從 00...
PAT甲級刷題實錄 1014
這題需要用到佇列,而且不止一條。首先是每個等待視窗各需要一條,另外在黃線外的等待顧客需要一條。c 提供了現成了現成的佇列型別,只要引用標頭檔案queue即可。演算法基本執行過程是 在輸入顧客等待時間時依次填滿每條佇列,超出佇列容量的,即編號大於n m 1的顧客,則push進黃線外的等待佇列中。當有視...
PAT甲級真題1140 外觀數列
外觀數列是指具有以下特點的整數序列 d,d1,d111,d113,d11231,d112213111,其中 d 是乙個 0,9 0,9 範圍內的不等於 11 的整數。序列的第 n 1n 1 項是對第 nn 項的描述。比如第 22 項表示第 11 項有 11 個 d,所以就是 d1 第 22 項是 1...