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 }