//the unit of time is minute
#include
#include
#include
#include
#include
#define PAY 200//插队的费用
#define maxDurt 200
#define minDurt 20
#define maxInter 10
int grade[100];//编号为N的理发师级别为grade[N-1]
int sum[3];//sum[0]: the income of first-grade barber
int empty[100];//empty[0] = 1 if the num 1 barber don't have an empty chair
int maxLen[100];//记下每个队列中出现的最长长度值(不包括座椅上的顾客)
int leave[100];//记录每一队列中最后一个顾客的离开时间
//define the standard of fee
int fee(int grade, int time)
{
int money = int(10000 / time) + int(300 / grade);
return money;
}
int getNum(int n)
{
int num = rand() % (n);
return num;
}
class client
{
public:
int durtTime;
int select;
int inTime;//time when the client come in the barber shop
int leaveTime;
client()
{
durtTime = select = inTime = leaveTime = 0;
}
client(int in)
{
durtTime = getNum(maxDurt - minDurt + 1) + minDurt;//minDurt-maxDurt
select = getNum(3) + 1;//1-3
inTime = in;
leaveTime = 0;
}
};
//if there is an empty chair of grade select(1-3) barber, return the barber's number, else return -1,remember is should not be 0
int empty_chair(int select, int grade[], int empty[])
{
int i=0;
while(grade[i] != 0)
{
if (grade[i] == select && empty[i] == 0)
return i;
i++;
}
return -1;
}
//寻找select(1-3)级别理发师中最短的队列,返回其编号
int shortest(vector
{
int minsize = 9999999,i=0,minqueue;
while(grade[i] != 0)
{
if (grade[i] == select)
{
int nowsize = vec[i].size();
if (nowsize < minsize)
{
minsize = nowsize;
minqueue = i;
}
}
i++;
}
//这个队中要插一个人,所以是和(minsize - 1 + 1)比较
if(maxLen[minqueue] < minsize)
maxLen[minqueue] = minsize;
return minqueue;
}
//从所有队中找最短的队
int shortest(vector
{
int minsize = 9999999,i=0,minqueue;
while(i < N)
{
int nowsize = vec[i].size();
if (nowsize < minsize)
{
minsize = nowsize;
minqueue = i;
}
i++;
}
//这个队中要插一个人,所以是和(minsize -1 + 1)比较
if(maxLen[minqueue] < minsize)
maxLen[minqueue] = minsize;
return minqueue;
}
//返回所有队中最快的队
int fastest(vector
{
int i;
int min = 999999, index = 0;
for( i = 0; i < N; i++)
{
if(leave[i] < min)
{
min = leave[i];
index = i;
}
}
int len = vec[index].size();
//这个队中要插一个人,所以是和(len -1 + 1)比较
if(maxLen[index] < len)
maxLen[index] = len;
return index;
}
/ /时间单位为分钟
#包括
包括
包括
的#include
包括
定义付款200 / /插队的费用
定义maxDurt 200
定义minDurt 20
定义maxInter 10
诠释级[100] ;/ /的数N美发师级级[N-1]
int总和[3] ;/ /总[0]:第一级理发的收入...... />诠释空[100] ;/ /空[0] = 1,如果数量1理发师没有一个空着的椅子
诠释MAXLEN [100] ;/ /写下来每个队列中出现的最长的长度值(不不包括对客户所在地)
诠释离开[100] ;/ /记录每个队列的最后一名顾客离开的时候
/ /定义标准的费用
诠释费用(INT级,时间)
{
诠释金钱=(10000 /时间)+(300 /级);
退货;
}
诠释getNum(廉政n )
{
整型数= RAND()%(N);返??回num
}
类客户端
{
:
诠释durtTime;
整数选择;
诠释银泰;/ /当客户端在理发店
诠释leaveTime
客户端()
{
durtTime =选择=银泰百货leaveTime = 0;
}
客户端(整数)
{
durtTime = getNum(maxDurt - minDurt + 1)+ minDurt ;/ / minDurt-maxDurt的
选择= getNum(3)+ 1 ;/ / 1-3
银泰=中;
leaveTime = 0;
}
}
/ /如果有一个空椅子级的选择(1-3)理发,返回理发店的电话号码,否则返回-1,记住的是,不应该是0
empty_chair(整数选择,INT级[],诠释空[])
{
INT I = 0;
(级[I]!= 0)
{
(A级[我] ==选择&&空的[I] == 0)
回报我;
+ +;
}
返回-1;
}
> / /选择(1-3)水平理发最短的队列,返回其ID
诠释最短(矢量“队列的”及血管内皮细胞,INT选择,级[],诠释MAXLEN []) BR /> {
诠释MINSIZE = 9999999,I = 0,minqueue;
(级[I]!= 0)
{
(A级[I] ==选择)
{
诠释nowsize的向量[我的]。尺寸();
(nowsize
MINSIZE = nowsize;
minqueue = I;
}
}
+ +;
}
/ /这个团队插上一个人,这是和(MINSIZE - 1 + 1)比较
如果(MAXLEN [minqueue]
回报minqueue;
}
/ /所有的球队找到最短的团队
诠释最短(向量<队列的>血管内皮细胞,整数N,MAXLEN [])
{
诠释MINSIZE = 9999999,I = 0,minqueue的;
(I
诠释nowsize =向量[I]。 ();
(nowsize
MINSIZE = nowsize
minqueue = I;
}
+ +; ...... />}
/ /这个团队中插入一个人,所以(MINSIZE -1 + 1)比较
(MAXLEN [minqueue] MINSIZE)
MAXLEN minqueue] = MINSIZE;
回报minqueue;
}
/ /返回所有球队中速度最快的球队
诠释最快的速度(矢量<队列的>血管内皮细胞,整数N,离开[],诠释MAXLEN [])
{
我;
诠释分钟= 999999,指数= 0;
(i = 0; I
(离开[I] <分钟)
{
分钟=休假[我]
>指数= I;
}
}
诠释莱恩??向量[指数]。 ();
/ /这个团队插上一个人,所以比较
(MAXLEN [索引]
MAXLEN [指数(LEN -1 + 1) ] = LEN回报指数
}
头文件全部加上.h
把using那句标准库编程去掉。
文件名称更改文.c
编译-运行。