C++编程:医院有A、B、C、D、E、F、G七位医生,每人在一周内要值一次夜班。排班的要求是:
(1)A医生比C医生晚一天值班;
(2)D医生比E医生晚二天值班;
(3)B医生比G医生早三天值班;
(4)F医生的值班日在B和C医生的中间,且是星期四;
请编写程序,输出每位医生的值班日。值班日以Sunday,Monday,Tuesday,Wednesday,Thurday,Friday,Saturday 分别表示星期日到星期六(提示:用枚举变量)
以下是此题的【c++源代码】
#include<iostream>
using namespace std;
int main()
{
enum weekday{sun,mon,tus,wed,thu,fri,sat}; //声明枚举类型
enum weekday day; //定义枚举变量
int a,b,c,d,e,f,g,loop; //定义整形变量
char ch='A'; //定义字符变量
f=thu; //按照题意,F医生是星期四值班
for(a=sun;a<=sat;a++) //需要逐个检查A医生星期几符合条件
if(a!=f) //A医生值班日子不应该与F医生相同
for(b=sun;b<=sat;b++) //逐个检查B医生星期几符合条件
if((a!=b)&&(f>b)) //B医生值班日子不应该与A医生相同,且F在B之后
for(c=sun;c<=sat;c++) //逐个检查C医生星期几符合条件
if((c!=a)&&(c!=b)&&(c!=f)&&(a==c+1)&&(f<c)) //C医生值班日子不应该与A,B,F医生相同,且A比C晚一天
for(d=sun;d<=sat;d++) //逐个检查D医生星期几符合条件
if((d!=a)&&(d!=b)&&(d!=c)&&(d!=f)&&(c==d+3)) //D医生值班日子不应该与A,B,C,F医生相同,且C与D之后3天
for(e=sun;e<=sat;e++) //逐个检查E医生星期几符合条件
if((e!=a)&&(e!=b)&&(e!=c)&&(e!=d)&&(e!=f)&&(d==e+2)) //E值班不应该与A,B,C,D,E,F相同,且E与D前2天
for(g=sun;g<=sat;g++) //逐个检查G医生条件
if((g!=a)&&(g!=b)&&(g!=c)&&(g!=d)&&(g!=e)&&(g!=f)&&(g==b+2)) //G值班不应该与A,B,C,D,E,F相同,且G与B后2天
//符合以上条件才能执行以下工作
for(loop=0;loop<7;loop++)
{ cout<<"Doctor"<<char(ch+loop)<<":";
switch(loop+1)
{
case 1:day=weekday(a);break;
case 2:day=weekday(b);break;
case 3:day=weekday(c);break;
case 4:day=weekday(d);break;
case 5:day=weekday(e);break;
case 6:day=weekday(f);break;
case 7:day=weekday(g);break;
}
switch(day)
{
case sun:cout<<"Sunday"<<endl;break;
case mon:cout<<"Monday"<<endl;break;
case tus:cout<<"Thusday"<<endl;break;
case wed:cout<<"Wednesday"<<endl;break;
case thu:cout<<"Thurday"<<endl;break;
case fri:cout<<"Friday"<<endl;break;
case sat:cout<<"Saturday"<<endl;break;
}
}
return 0;
}
来源:c++程序设计第三版谭浩强课后答案
本文链接:http://www.wb98.com/cjia/post/cjia_7.11.html