医院有A、B、C、D、E、F、G七位大夫,在一星期内(星期一至星期天)每人要轮流值班一天。现在已知:
A大夫比C大夫晚一天值班;
D大夫比E大夫晚二天值班;
B大夫比G大夫早三天值班;
F大夫的值班日在B和C大夫的中间,且是星期四;
请确定每天究竟是哪位大夫值班?
*问题分析与算法设计
由题目可推出如下已知条件:
*F是星期四值班;
*B值班的日期在星期一至星期三,且三天后是G值班;
*C值班的日期在星期五至星期六,且一天后是A值班;
*E两天后是D值班;E值班的日期只能在星期一至星期三;
在编程时用数组元素的下标1到7表示星期一到星期天,
Doctor E is on duty MONDAY.
Doctor B is on duty TUESDAY.
Doctor D is on duty WEDNESDAY.
Doctor F is on duty THURSDAY.
Doctor G is on duty FRIDAY.
Doctor C is on duty SATURDAY.
Doctor A is on duty SUNDAY.
用数组元素的值分别表示A~F七位大夫。
A大夫比C大夫晚一天值班;
D大夫比E大夫晚二天值班;
B大夫比G大夫早三天值班;
F大夫的值班日在B和C大夫的中间,且是星期四;
请确定每天究竟是哪位大夫值班?
*问题分析与算法设计
由题目可推出如下已知条件:
*F是星期四值班;
*B值班的日期在星期一至星期三,且三天后是G值班;
*C值班的日期在星期五至星期六,且一天后是A值班;
*E两天后是D值班;E值班的日期只能在星期一至星期三;
在编程时用数组元素的下标1到7表示星期一到星期天,
1 #include <stdio.h>
2
3 int main()
4 {
5 int i, j, t;
6 int a[8]={0};
7 char *day[]={"","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"};
8 a[4]=6;
9 for (i = 1;i <= 3; i++)
10 {
11 a[i]=2;
12 if (!a[i+3])
13 {
14 a[i+3]=7;
15 }
16 else
17 {
18 a[i]=0;
19 continue;
20 }
21 for (t = 1; t <= 3; t++)
22 {
23 if (!a[t])
24 {
25 a[t]=5;
26 }
27 else
28 {
29 continue;
30 }
31 if (!a[t+2])
32 {
33 a[t+2]=4;
34 }
35 else
36 {
37 a[t]=0;
38 continue;
39 }
40 for (j = 5; j < 7; j++ )
41 {
42 if (!a[j])
43 {
44 a[j]=3;
45 }
46 else
47 {
48 continue;
49 }
50 if (!a[j+1])
51 {
52 a[j+1]=1;
53 }
54 else
55 {
56 a[j]=0;
57 continue;
58 }
59 for (i = 1; i <= 7; i++)
60 {
61 printf("Doctor %c is on duty %s.\n",'A'+a[i]-1,day[i]);
62 }
63 }
64 }
65 }
66 return 0;
67 }
[root@localhost 55]# ./a.out Doctor E is on duty MONDAY.
Doctor B is on duty TUESDAY.
Doctor D is on duty WEDNESDAY.
Doctor F is on duty THURSDAY.
Doctor G is on duty FRIDAY.
Doctor C is on duty SATURDAY.
Doctor A is on duty SUNDAY.
用数组元素的值分别表示A~F七位大夫。