医院病床分配仿真 举例(c语言)
2015-08-10 11:51
246 查看
#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);
}
相关文章推荐
- C++常见面试题
- leetcode 日经贴,Cpp code -Dungeon Game
- C++ 作用域
- C语言中的链接编写教程
- C++经典书籍
- C++中运算符 &和&&、|和|| 的区别
- C++中类型数据所占字节数
- C++之多态性与虚函数
- C/C++ 快速排序算法
- 求最大子序列
- C++ 堆排序算法
- C++<algorithm>中sort的比较函数写法
- C/C++知识要点5——智能指针原理及自定义实现
- LeetCode 211. Add and Search Word - Data structure design
- I2C总线之(三)---以C语言理解IIC
- C++学习笔记与思考_2 --const限定符及其引用,typedef符号
- C++ Builder XE8 安卓开发之使用TIdThreadComponent控件接收客户端的数据
- C语言-04-函数
- c++ 显示调用dll
- C++/C语言_宏函数存在的问题