資源簡介
理發店里有一位理發師,一把理發椅和N把供等候理發的顧客坐的椅子
如果沒有顧客,則理發師便在理發椅上睡覺。當一個顧客到來時,他必須先喚醒理發師。如果顧客到來時理發師正在理發,則如果有空椅子,可坐下來等;否則離開。
代碼片段和文件信息
#include
#include
#include
#define?random?(rand()*10000)/RAND_MAX?//用來產生隨機數
int?main()
{
?int?chairs=10;?//普通椅子數
?int?customers=0;?//顧客數
?int?count=0;?//循環中用來計量的
?int?waiting=0;?//等候理發的人數
?int?finish=0;?//已經理完發的人數
?int?work=0;?//理發師是否在工作
?int?sleeping=0;?//理發師是否在打瞌睡
?char?opendoor;?//理發店是否開門接待顧客
?char?blank;?//獲取空白字符?
?blank=getchar();?//這句話不太理解
?printf(“要開門接待顧客嗎?y/n\n“);
?opendoor=getchar();
?printf(“理發店內總共有%d把普通椅子。\n“chairs);
?while(opendoor!=‘y‘)
?{
????printf(“對不起,尚未營業!\n“);
????blank=getchar();
????printf(“要開門接待顧客嗎?y/n\n“);
????opendoor=getchar();
?}
?printf(“開門迎接客人!\n“);?//開門接待顧客
?if(random%2)?//剛開門時隨機產生顧客,分有顧客和沒顧客兩種情況若為真,則有顧客
?{
????printf(“剛開門就有顧客到來。\n“);
????customers++;?//顧客數加1
????printf(“理發師為第%d個顧客理發。\n“customers);
????work=1;?//進入工作狀態
?Loop:for(count=0;random%3&&count<=5;count++)?/*理發師為一個顧客理發的期間隨機產生顧客,分有顧客和沒顧客兩種情況若為真則有顧客且最多為來了五個*/
?{
????customers++;
????printf(“第%d個顧客到來了。\n“customers);
????sleeping=0;?//設定理發師不在打瞌睡狀態
????if(work==1)??????//判斷是否正為顧客理發,是則新來顧客等待,否則不用等待
????{
????????if(waiting ????????{?
????????????printf(“有%d把空椅子,顧客坐下等待。\n“chairs-waiting);
????????????waiting++;
????????}
????????else
????????????printf(“沒有空椅子,顧客離開。\n“);
????}
???????else
???????{
????????????printf(“理發
評論
共有 條評論