/*
A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。
*/
#include "stdio.h"
#include "conio.h"
enum
{
S_A=0, S_B, S_C, S_D, S_E ,S_ALL
};
int deal(int in)
{
int mask=in,i;
#define Bit(n)
(((mask)&(1<<(n)))!=0)
if(Bit(S_A)&&!Bit(S_B)) return 0;
if(Bit(S_B)&&Bit(S_C)) return 0;
if(Bit(S_C)!=Bit(S_D)) return 0;
if(!Bit(S_D)&&!Bit(S_E)) return 0;
if(Bit(S_E)&&!(Bit(S_A)&&Bit(S_D))) return 0;
for(i=S_A;i<S_ALL;i++)
{
if(Bit(i)) printf("%c ",i-S_A+'A');
}
printf("\n");
return 1;
}
void dealAll()
{
int in=0;
printf("dealAll:\n");
for(in=0;in<(1<<S_ALL)-1;in++)
{
deal(in);
}
}
int main(void)
{
dealAll();
return 0;
}