睡眠理發師問題


  1 #include<stdio.h>
  2 #include<windows.h>
  3 #define random (rand()*10000)/RAND_MAX //用來產生隨機數
  4 int main()
  5 {
  6     int c;//沙發數
  7     int customers=0;//顧客數
  8     int count=0;//循環中用來計量的
  9     int w=0;//等候理發的人數
 10     int finish=0;//已經理完發的人數
 11     int work1=0,work2=0,work3=0;//理發師是否在工作
 12     int sleeping1=0,sleeping2=0,sleeping3=0;     //理發師是否在休息
 13     char opendoor;       //理發店是否開門接待顧客
 14     char blank;          //獲取空白字符
 15     printf("請輸入理發店內沙發數量:\n");
 16     scanf("%d",&c);
 17     blank=getchar();
 18     printf("理發店內總共有%d張沙發。\n",c);
 19     printf("是否營業?y/n\n");
 20     opendoor=getchar();
 21     
 22     while(opendoor!='y')
 23     {
 24         printf("對不起,理發店還沒有開門!\n");
 25         blank=getchar();
 26         printf("是否營業?y/n\n");
 27         opendoor=getchar();
 28     }
 29     printf("開門營業!\n");
 30     if(random%2)
 31     {//剛開門時隨機產生顧客,分有顧客和沒顧客兩種情況,若為真,則有顧客
 32         Loop:for(count=0;random%2 && count<=5;count++)
 33         {    
 34             customers++;
 35             printf("第%d個顧客到來了。\n",customers);
 36             sleeping1=0;   //設定理發師沒有休息
 37             if(work1==1)
 38             {             //判斷是否正為顧客理發,是則新來顧客等待,否則不用等待
 39                 if(w<c)     //判斷是否有空沙發
 40                 {
 41                     printf("有%d張空沙發,顧客坐下等待。\n",c-w);
 42                     w++;
 43                 }
 44                 else 
 45                     printf("沒有空沙發,顧客離開。\n");
 46             }
 47             else
 48             {
 49                 printf("A理發師為第%d個顧客理發。\n",customers);
 50                 work1=1;    
 51             }
 52             customers++;
 53             printf("第%d個顧客到來了。\n",customers);
 54             sleeping2=0;//設定理發師不在打瞌睡狀態
 55             
 56             if(work2==1)//判斷是否正為顧客理發,是則新來顧客等待,否則不用等待
 57             {
 58                 if(w<c)//判斷是否有空沙發
 59                 {
 60                     printf("有%d張空沙發,顧客坐下等待。\n",c-w);
 61                     w++;
 62                 }
 63                 else 
 64                     printf("沒有空沙發,顧客離開。\n");
 65             }
 66             else 
 67             {
 68                 printf("B理發師為第%d個顧客理發。\n",customers);
 69                 work2=1;
 70             }
 71             customers++;
 72             printf("第%d個顧客到來了。\n",customers);
 73             sleeping3=0;
 74             if(work3==1)
 75             {//判斷是否正為顧客理發,是則新來顧客等待,否則不用等待
 76                 if(w<c)   //判斷是否有空沙發
 77                 {
 78                     printf("有%d把空沙發,顧客坐下等待。\n",c-w);
 79                     w++;    
 80                 }
 81                 else
 82                     printf("沒有空沙發,顧客離開。\n");
 83             }
 84             else
 85             {
 86                 printf("C理發師為第%d個顧客理發。\n",customers);
 87                 work3=1;
 88             }
 89         }
 90         if(work1==1)
 91         {        
 92             Sleep(2000);//為一個顧客理發需要時間
 93             printf("A理發完成。\n");
 94             work1=0;//理發完成,理發師空閑
 95             finish++;//理發完人數加1
 96         }
 97         if(work2==1)
 98         {
 99             Sleep(2000);//為一個顧客理發需要時間
100             printf("B理發完成。\n");
101             work2=0;//理發完成,理發師空閑
102             finish++;//理發完人數加1
103         }
104         if(work3=1)
105         {
106         Sleep(2000);//為一個顧客理發需要時間
107         printf("C理發完成。\n");
108         work3=0;//理發完成,理發師空閑
109         finish++;//理發完人數加1
110         }
111         if(finish>5)//完成為4個人理發的任務,詢問理發師是否繼續工作
112         {
113             printf("已經為%d位顧客理發了,還有%d個顧客在等待,是否繼續工作?y/n\n",finish,w);
114             blank=getchar();
115             opendoor=getchar();
116             if(opendoor=='n')
117                 exit(0);
118             sleeping1=0;
119             sleeping2=0;
120             sleeping3=0;//繼續工作
121         }
122         if(w>0)//看看是否有人在等待理發
123         {
124             printf("有%d位顧客等待,A理發師繼續為等待的顧客理發\n",w);
125             w--;
126             work1=1;//有則進入工作狀態
127             if(w>0)//看看是否有人在等待理發
128             {
129                 printf("有%d位顧客等待,A理發師繼續為等待的顧客理發\n",w);
130                 w--;
131                 work2=1;//有則進入工作狀態
132                 if(w>0)//看看是否有人在等待理發
133                 {
134                     printf("有%d位顧客等待,A理發師繼續為等待的顧客理發\n",w);
135                     w--;
136                     work1=1;//有則進入工作狀態
137                 }
138             }
139         }
140         else
141         {
142             if(sleeping1==0&&sleeping2==0&&sleeping3==0)
143             {
144                 printf("沒有顧客來理發,理發師坐在沙發上休息\n");
145                 sleeping1=1;sleeping2=0;sleeping3==0;
146             }goto Loop;
147         
148         }
149     }
150         else
151         {
152             if(sleeping1==0&&sleeping2==0&&sleeping3==0)
153             printf("沒有顧客來理發,理發師坐在沙發上\n");
154             sleeping1=1;
155             sleeping2=0;
156             sleeping3=0;
157         }goto Loop;
158         
159     return 0;
160 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM