A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:
1. 如果A参加,B也参加;
2. 如果C不参加,D也不参加;
3. A和C中只能有一个人参加;
4. B和D中有且仅有一个人参加;
5. D、E、F、G、H 中至少有2人参加;
6. C和G或者都参加,或者都不参加;
7. C、E、G、I中至多只能2人参加
8. 如果E参加,那么F和G也都参加。
9. 如果F参加,G、H就不能参加
10. 如果I、J都不参加,H必须参加
请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能,则输出所有的可能情况。每种情况占一行。参赛同学按字母升序排列,用空格分隔。
比如:
C D G J
就是一种可能的情况。
多种情况的前后顺序不重要
技巧: 参加为1,不参加为0,不用boolean类型
3 if(a+c<=1)
4 if(b+d==1)
.....
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a,b,c,d,e,f,g,h,i,j;
for(a=0;a<2;a++)
{
for(b=0;b<2;b++)
{
if(a==1&&b!=1)//a参加,b不参加
continue;//1
for(c=0;c<2;c++)
{
if(a+c==2)
continue;//3
for(d=0;d<2;d++)
{
if(c==0&&d==1)
continue;//2
if(b+d!=1)
continue;//4
for(e=0;e<2;e++)
{
for(f=0;f<2;f++)
{
for(g=0;g<2;g++)
{
if(c+g==1)
continue;//6
if(e==1&&f+g<2)
continue;//8
for(h=0;h<2;h++)
{
if(d+e+f+g+h<2)
continue;//5
if(f==1&&g+h>=1)
continue;//9
for(i=0;i<2;i++)
{
if(c+e+i>2)
continue;//7
for(j=0;j<2;j++)
{
if(i+j+h==0)
continue;//10
else
printf("%d %d %d %d %d %d %d %d %d %d\n",a,b,c,d,e,f,g,h,i,j );
}
}
}
}
}
}
}
}
}
}
}