题目描述
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
就是一种可能的情况。
多种情况的前后顺序不重要
输入
暂无
输出
暂无
样例输入
暂无
样例输出
暂无
参考代码
#include<stdio.h>
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++)
for (C=0;C<2;C++)
for (D=0;D<2;D++)
for (E=0;E<2;E++)
for (F=0;F<2;F++)
for (G=0;G<2;G++)
for (H=0;H<2;H++)
for (I=0;I<2;I++)
for (J=0;J<2;J++)
{
if(A&&!B)continue;
if(!C&&D)continue;
if(A&&C)continue;
if((B&&D)||(!B&&!D))continue;
if((D&&!E&&!F&&!G&&!H)||(!D&&E&&!F&&!G&&!H)||(!D&&!E&&F&&!G&&!H)||(!D&&!E&&!F&&G&&!H)||(!D&&!E&&!F&&!G&&H)||(!D&&!E&&!F&&!G&&!H))continue;
if((C&&!G)||(!C&&G))continue;
if((C&&E&&G&&I)||(!C&&E&&G&&I)||(C&&!E&&G&&I)||(C&&E&&!G&&I)||(C&&E&&G&&!I))continue;
if(E&&!(F&&G))continue;
if(F&&!(!G&&!H))continue;
if((!I&&!J)&&!H)continue;
if(A==1)
printf("A ");
if(B==1)
printf("B ");
if(C==1)
printf("C ");
if(D==1)
printf("D ");
if(E==1)
printf("E ");
if(F==1)
printf("F ");
if(G==1)
printf("G ");
if(H==1)
printf("H ");
if(I==1)
printf("I ");
if(J==1)
printf("J ");
printf("n");
}
return 0;
}
解析
暂无