逻辑判断与推理-哪个大夫哪天值班 - 实践
医院有A、B、C、D、E、F、G七位大夫,在一星期内(星期一到星期天)每人要轮流值班一天。现在已知:
A大夫比C大夫晚一天值班;
D大夫比E大夫晚两天值班;
B大夫比G大夫早三天值班;
F大夫的值班日在B和C中间,且是星期四;
请确定每天究竟是哪位大夫值班?
1.问题分析与算法设计
由题目可推出如下已知条件:
a. F是星期四值班
b. B值班的日期在星期一至星期三,且三天后是G值班;
c. C值班的日期在星期五至星期六,且一天后是A值班;
d. E两天后是D值班,E值班的日期只能在星期一至星期三;
在编程时用数组元素的下表1到7表示星期一道星期天,用数组元素的值1到7分别表示A~F七位大夫。
2.程序与程序注释
#include <stdio.h>
int a[8];
char *day[] ={"","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"};//建立星期表
void main()
{
int i,t,j;
a[4] = 6;//星期四是F值班
for(i=1;i<=3;i++)
{
a[i] = 2; //假设B值班的日期
if(!a[i+3]) ///若三天后无人值班则安排G值班
{
a[i+3] = 7;
}
else
{
a[i] = 0; //否则B值班的日期不对
continue;
}
for(t=1;t<=3;t++)//假设E值班的时间
{
if(!a[t])
{
a[t] = 5; //若当天无人值班则安排E值班
}
else
{
continue;
}
if(!a[t+2])
{
a[t+2]=4;//若E值班两天后无人值班则应改为D
}
else
{
a[t] = 0; //否则E值班的日期不对
continue;
}
for(j=5;j<7;j++)
{
if(!a[j])
{
a[j]=3; //若当天无人值班则安排C值班
}
else
{
continue;
}
if(!a[j+1]) //C之后一天无人值班则应当是A值班
{
a[j+1]=1;
}
else
{
a[j] = 0;//否则A的值班日期不对
continue;
}
for(i=1;i<=7;i++)
{
//完毕安排输出结果
printf("Doctor %c is on duty %s.\n",'A'+a[i]-1,day[i]);
}
}
}
}
}
3.运行结果
星期一 E
星期二 B
星期三 D
星期四 F
星期五 G
星期六 C
星期日 A

浙公网安备 33010602011771号