#include <stdio.h>
#include <stdlib.h>
# define ep 9 //每天人数
# define ws 17
# define bd 20
# define bs 23
# define qg 12
# define sw 28
# define weekbe 1 //第一天周一
# define ws2 7
# define bd2 4
# define bs2 9
# define qg2 10
# define sw2 7
# define day 150 //天数
main()
{
int allpe[ep*day]; //所有病人
int eveti[ep*day]; // 被服务时间
int namber[ep*day]; //编号
int timeing[ep*day]; //等待时间
int a,i;
int k=0;
int farst[5][7]={{4,4,4,4,4,4,4},{1,1,2,2,2,3,3},{3,3,1,1,1,2,2},{2,2,3,3,3,1,1},{2,2,3,3,3,1,1}}; //优先级矩阵
int farstall[ep*day]={0}; //最后一天
int badday[78]; //病床占用时间
int bad0[78];
int days=1;
int badnull=0;
//int numbersos=0; //急诊位置
//int numberple=0; //普通位置
int j=0; //空床位位置
int weekbes; //记录周几
FILE *fp1;
FILE *fp2;
FILE *fp3;
FILE *fp4;
for(i=0;i<5;i++) //每个病人至少等待一天
{
for(j=0;j<7;j++)
printf("%d ",farst[i][j]);
printf("\n");
}
for(i=0;i<ep*day;i++) //每个病人至少等待一天
{
timeing[i]=1;
}
for(i=0;i<ep*day;i++) //产生病人 a
{ a=rand()%100;
if((a>=0)&&(a<ws))
allpe[i]=1;
if((a>=ws)&&(a<ws+bd))
allpe[i]=2;
if((a>=ws+bd)&&(a<ws+bd+bs))
allpe[i]=3;
if((a>=ws+bd+bs)&&(a<ws+bd+bs+qg))
allpe[i]=4;
if((a>=ws+bd+bs+qg)&&(a<=ws+bd+bs+qg+sw))
allpe[i]=5;
}
for(i=0;i<ep*day;i++) //病人被服务时间
{
switch(allpe[i])
{
case 1: eveti[i]=7; break;
case 2: eveti[i]=7; break;
case 3: eveti[i]=9; break;
case 4: eveti[i]=10; break;
case 5: eveti[i]=13; break;
}
}
for(i=0;i<ep*day;i++) //病人编号
{
namber[i]=i+1;
}
for(i=0;i<78;i++)
{
badday[i]=1;
}
for(days;days<=day;days++) //第days 天开始了
{
weekbes=days%7+weekbe; //今天周几 weekbes
for(i=0;i<ep*days;i++) //根据周几对所有病人分优先级
{
if(allpe[i]==1)
farstall[i]=farst[0][weekbes-1];
if(allpe[i]==2)
farstall[i]=farst[2][weekbes-1];
if(allpe[i]==3)
farstall[i]=farst[1][weekbes-1];
if(allpe[i]==4)
farstall[i]=farst[3][weekbes-1];
if(allpe[i]==5)
farstall[i]=farst[4][weekbes-1];
}
for(i=0;i<78;i++) //1 床位服务时间减少一天
{
if(badday[i]!=0)
badday[i]--;
}
for(i=0;i<=77;i++) // 2 检查空床数
{
if (badday[i]==0)
{
bad0[badnull]=i; // 床位编号
badnull++; // 空床数
}
}
//printf("%d\n",badnull);
if(badnull!=0) // 3 如果有空床位为候诊者分配床位
for(i=0;(i<days*ep)&&(j<badnull);i++) // 3.1 分给4 分配床位没有床位或搜索完毕停止
if (namber[i]!=0)
{
if(farstall[i]==4)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
namber[i]=0;
}
}
if(j<badnull) // 3.2 3
for(i=0;(i<days*ep)&&(j<badnull);i++)
{
if(namber[i]!=0)
{
if(farstall[i]==3)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
namber[i]=0;
}
}
}
if(j<badnull) // 3.3 2
for(i=0;(i<days*ep)&&(j<badnull);i++)
{
if(namber[i]!=0)
{
if(farstall[i]==2)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
namber[i]=0;
}
}
}
if(j<badnull) // 3.4 1
for(i=0;(i<days*ep)&&(j<badnull);i++)
{
if(namber[i]!=0)
{
if(farstall[i]==1)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
namber[i]=0;
}
}
}
for(i=0;i<days*ep;i++) // 4未安排床位病人加一天
{
if (namber[i]!=0)
{
k++;
timeing[i]++;
}
}
//printf("%d\n",j);
j=0;
badnull=0;
}
fp1=fopen("a.txt","w"); //打开文件以便写入数据
fp2=fopen("b.txt","w");
fp3=fopen("c.txt","w");
fp4=fopen("d.txt","w");
for (i = 0; i<ep*day; i++) //
{
fprintf(fp1,"%d\n", namber[i]);
}
for (i = 0; i<ep*day; i++) //
{
fprintf(fp2,"%d\n",eveti[i]);
}
for (i = 0; i<ep*day; i++) //等待时间
{
fprintf(fp3,"%d\n",timeing[i]);
}
for (i = 0; i<ep*day; i++) //
{
fprintf(fp4,"%d\n", allpe[i]);
}
fclose(fp1); //写入完毕,关闭文件
fclose(fp2);
fclose(fp3);
fclose(fp4);
printf("%d/day\nday %d day\n",ep,day);
printf("%d\n",k);
}
#include <stdlib.h>
# define ep 9 //每天人数
# define ws 17
# define bd 20
# define bs 23
# define qg 12
# define sw 28
# define weekbe 1 //第一天周一
# define ws2 7
# define bd2 4
# define bs2 9
# define qg2 10
# define sw2 7
# define day 150 //天数
main()
{
int allpe[ep*day]; //所有病人
int eveti[ep*day]; // 被服务时间
int namber[ep*day]; //编号
int timeing[ep*day]; //等待时间
int a,i;
int k=0;
int farst[5][7]={{4,4,4,4,4,4,4},{1,1,2,2,2,3,3},{3,3,1,1,1,2,2},{2,2,3,3,3,1,1},{2,2,3,3,3,1,1}}; //优先级矩阵
int farstall[ep*day]={0}; //最后一天
int badday[78]; //病床占用时间
int bad0[78];
int days=1;
int badnull=0;
//int numbersos=0; //急诊位置
//int numberple=0; //普通位置
int j=0; //空床位位置
int weekbes; //记录周几
FILE *fp1;
FILE *fp2;
FILE *fp3;
FILE *fp4;
for(i=0;i<5;i++) //每个病人至少等待一天
{
for(j=0;j<7;j++)
printf("%d ",farst[i][j]);
printf("\n");
}
for(i=0;i<ep*day;i++) //每个病人至少等待一天
{
timeing[i]=1;
}
for(i=0;i<ep*day;i++) //产生病人 a
{ a=rand()%100;
if((a>=0)&&(a<ws))
allpe[i]=1;
if((a>=ws)&&(a<ws+bd))
allpe[i]=2;
if((a>=ws+bd)&&(a<ws+bd+bs))
allpe[i]=3;
if((a>=ws+bd+bs)&&(a<ws+bd+bs+qg))
allpe[i]=4;
if((a>=ws+bd+bs+qg)&&(a<=ws+bd+bs+qg+sw))
allpe[i]=5;
}
for(i=0;i<ep*day;i++) //病人被服务时间
{
switch(allpe[i])
{
case 1: eveti[i]=7; break;
case 2: eveti[i]=7; break;
case 3: eveti[i]=9; break;
case 4: eveti[i]=10; break;
case 5: eveti[i]=13; break;
}
}
for(i=0;i<ep*day;i++) //病人编号
{
namber[i]=i+1;
}
for(i=0;i<78;i++)
{
badday[i]=1;
}
for(days;days<=day;days++) //第days 天开始了
{
weekbes=days%7+weekbe; //今天周几 weekbes
for(i=0;i<ep*days;i++) //根据周几对所有病人分优先级
{
if(allpe[i]==1)
farstall[i]=farst[0][weekbes-1];
if(allpe[i]==2)
farstall[i]=farst[2][weekbes-1];
if(allpe[i]==3)
farstall[i]=farst[1][weekbes-1];
if(allpe[i]==4)
farstall[i]=farst[3][weekbes-1];
if(allpe[i]==5)
farstall[i]=farst[4][weekbes-1];
}
for(i=0;i<78;i++) //1 床位服务时间减少一天
{
if(badday[i]!=0)
badday[i]--;
}
for(i=0;i<=77;i++) // 2 检查空床数
{
if (badday[i]==0)
{
bad0[badnull]=i; // 床位编号
badnull++; // 空床数
}
}
//printf("%d\n",badnull);
if(badnull!=0) // 3 如果有空床位为候诊者分配床位
for(i=0;(i<days*ep)&&(j<badnull);i++) // 3.1 分给4 分配床位没有床位或搜索完毕停止
if (namber[i]!=0)
{
if(farstall[i]==4)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
namber[i]=0;
}
}
if(j<badnull) // 3.2 3
for(i=0;(i<days*ep)&&(j<badnull);i++)
{
if(namber[i]!=0)
{
if(farstall[i]==3)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
namber[i]=0;
}
}
}
if(j<badnull) // 3.3 2
for(i=0;(i<days*ep)&&(j<badnull);i++)
{
if(namber[i]!=0)
{
if(farstall[i]==2)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
namber[i]=0;
}
}
}
if(j<badnull) // 3.4 1
for(i=0;(i<days*ep)&&(j<badnull);i++)
{
if(namber[i]!=0)
{
if(farstall[i]==1)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
namber[i]=0;
}
}
}
for(i=0;i<days*ep;i++) // 4未安排床位病人加一天
{
if (namber[i]!=0)
{
k++;
timeing[i]++;
}
}
//printf("%d\n",j);
j=0;
badnull=0;
}
fp1=fopen("a.txt","w"); //打开文件以便写入数据
fp2=fopen("b.txt","w");
fp3=fopen("c.txt","w");
fp4=fopen("d.txt","w");
for (i = 0; i<ep*day; i++) //
{
fprintf(fp1,"%d\n", namber[i]);
}
for (i = 0; i<ep*day; i++) //
{
fprintf(fp2,"%d\n",eveti[i]);
}
for (i = 0; i<ep*day; i++) //等待时间
{
fprintf(fp3,"%d\n",timeing[i]);
}
for (i = 0; i<ep*day; i++) //
{
fprintf(fp4,"%d\n", allpe[i]);
}
fclose(fp1); //写入完毕,关闭文件
fclose(fp2);
fclose(fp3);
fclose(fp4);
printf("%d/day\nday %d day\n",ep,day);
printf("%d\n",k);
}