逻辑题,求大神看一下程序哪有问题
医院有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表示星期一到星期天,用数组元素的值分别表示A~F七位大夫。
#include <stdio.h>
int f(int *a)
{
a[6]=4;
int t1=a[2]>=1&&a[2]<=3&&a[2]+3==a[7];
int t2=a[3]>=5&&a[3]<=6&&a[3]+1==a[1];
int t3=a[5]>=1&&a[5]<=3&&a[5]+2==a[4];
return t1&&t2&&t3;
}
void show(int *a)
{
for(int i=1;i<=7;i++)
printf("%d\n",a[i]);
}
void g(int *a,int n)
{
if(n>=7)
{
if(f(a)) show(a);
return;
}
a[n]=1;
g(a,n+1);
a[n]=2;
g(a,n+1);
a[n]=3;
g(a,n+1);
a[n]=4;
g(a,n+1);
a[n]=5;
g(a,n+1);
a[n]=6;
g(a,n+1);
a[n]=7;
g(a,n+1);
}
main()
{
int a[]={0,0,0,0,0,0,0};
g(a,1);
}