#include
#include
#define random (rand()*10000)/RAND_MAX //用来产生随机数
main()
{
int chairs; //普通椅子数
int customers=0; //顾客数
int count=0; //循环中用来计量的
int waiting=0; //等候理发的人数
int finish=0; //已经理完发的人数
int work=0; //理发师是否在工作
int sleeping=0; //理发师是否在打瞌睡
char opendoor; //理发店是否开门接待顾客
char blank; //获取空白字符
printf("请输入理发店内的普通椅子数:\n");
scanf("%d",&chairs);
blank=getchar(); //这句话不太理解
printf("理发店内总共有%d把普通椅子。\n",chairs);
printf("要开门接待顾客吗?y/n\n");
opendoor=getchar();
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%2&&count<=5;count++) /*理发师为一个顾客理发的期间随机产生顾客,分有顾客和没顾客两种情况,若为真则有顾客,且最多为来了五个*/
{
customers++;
printf("第%d个顾客到来了。\n",customers);
sleeping=0; //设定理发师不在打瞌睡状态
if(work==1) //判断是否正为顾客理发,是则新来顾客等待,否则不用等待
{
if(waiting<chairs) //判断是否有空椅子
{
printf("有%d把空椅子,顾客坐下等待。\n",chairs-waiting);
waiting++;
}
else
printf("没有空椅子,顾客离开。\n");
}
else
{
printf("理发师为第%d个顾客理发。\n",customers);
work=1;
}
}
if(work==1)
{
Sleep(2000); //为一个顾客理发需要时间
printf("理发完成。\n");
work=0; //理发完成,理发师空闲
finish++; //理发完人数加1
}
if(finish>4) //完成为4个人理发的任务,询问理发师是否继续工作
{
printf("已经为%d位顾客理发了,还有%d个顾客在等待,是否继续工作?y/n\n",finish,waiting);
blank=getchar();
opendoor=getchar();
if(opendoor=='n')
exit(0);
sleeping=0; //继续工作则改为清醒状态
}
if(waiting>0) //看看是否有人在等待理发
{
printf("有%d位顾客等待,理发师继续为等待的顾客理发\n",waiting);
waiting--;
work=1; //有则进入工作状态
goto Loop;
}
else //无则打瞌睡
{
if(sleeping==0)
{
printf("没有顾客来理发,理发师打瞌睡中……\n");
sleeping=1;
}
goto Loop; //继续边打瞌睡边等顾客
}
}
else //刚开门时随机产生顾客,若为假,则无顾客,理发师打瞌睡
{
if(sleeping==0)
{
printf("没有顾客来理发,理发师打瞌睡中……\n");
sleeping=1;
}
goto Loop;
}
}
人数统计aw6uw经济区为