逻辑判断与推理-哪个大夫哪天值班 - 实践

医院有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

posted @ 2025-08-01 13:23  wzzkaifa  阅读(26)  评论(0)    收藏  举报