PAT甲級真題 1014 Wait In Line

2021-10-04 21:17:51 字數 1897 閱讀 8172

一、題目

二、思路

題意:模擬排隊,但和實際排隊的區別在於:

思路:模擬排隊,記錄消費者辦理結束所需的總時間(以分鐘為單位,最後轉換為時刻,由等待時間、辦理時間組成),若等待時間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...