一个营业服务厅,有8个或者16个或者32个服务窗口办理不同业务,每隔2秒钟随机有客户到不同业务窗口报道(可能重复,客户需要等待),同时提示当前的所有窗口服务情况,当某个窗口受理客户服务后,记录相应窗口的服务状态,直到全部窗口用于受理客户业务,看看当第一次达到全部窗口进行业务受理使用了多少时间?
每隔两秒 ---> sleep(2);
随机数据 ---> rand();
函数使用帮助 man 3 函数名
这道题的思路:为什么我的窗口数刚好是8的整数呢?好像一个字节刚好有8位,那我们是不是刚好可以用一个字节的数据类型char的每个位的状态作为我们窗口的服务状态呢。
我的答案:
#include<stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int timecount; //计算循环次数
int count;
unsigned char Ckou=0x00; // 一个字节,开始时所有窗口置0
unsigned char Rpeo; //产生随机数
for(timecount=0;Ckou!=0xFF;timecount++)
{
sleep(2);
Rpeo=rand()%8; //产生0-7的随机数
printf("Rpeo=%hhd\n",Rpeo);
Ckou|=(0x01<<Rpeo); 将窗口数对应的位置1
for(count=0;count<8;count++) //循环输出各窗口的状态
{if(Ckou&(0x01<<count)) //或者if((Ckou>>count)&0x1 == 0x1)
printf("waiting!%d\n",count); //相与为1说明当前窗口正在使用
else
printf("ok!%d\n",count);
}
}
printf("total time=%d\n",timecount*2);
return 0;
}
上面那道题难度不是很大,接着我们做一下下面这道题。
窗口服务指示系统2:
继续上述情景,假如每个客户业务的处理时间为随机(1-3秒,业务生成时确定任务处理时间),同时需要对排队客户进行
服务(同一窗口,不同用户有重复的业务请求),当窗口全满时,停止接受新客户的业务,待窗口空置数超过一半时恢复业务请求,
统计哪项业务最受欢迎,及其平均处理时间(每十单统计)
注意:记录每个窗口的排队人数,并需要根据顺序处理完毕。
(答案我到时会在评论里公布,因为我暂时还没想出来)