#include <stdio.h>
void Test(int comb)
{
int a[10], i;
for(i = 0; i < 10; a[i] = (comb >> i++) & 1);
if(!a[0] || a[1]) /*1. 如果A参加,B也参加;*/
if(a[2] || !a[3]) /*2. 如果C不参加,D也不参加;*/
if(!a[0] || !a[2]) /*3. A和C中只能有一个人参加;*/
if(a[1] && !a[3] || !a[1] && a[3]) /*4. B和D中有且仅有一个人参加;*/
if(!(a[3] && !a[4] && !a[5] && !a[6] && !a[7] ||
!a[3] && a[4] && !a[5] && !a[6] && !a[7] ||
!a[3] && !a[4] && a[5] && !a[6] && !a[7] ||
!a[3] && !a[4] && !a[5] && a[6] && !a[7] ||
!a[3] && !a[4] && !a[5] && !a[6] && a[7] ||
!a[3] && !a[4] && !a[5] && !a[6] && !a[7])) /*5. D、E、F、G、H 中至少有2人参加;*/
if(a[2] && a[6] || !a[2] && !a[6]) /*6. C和G或者都参加,或者都不参加;*/
if(!(!a[2] && a[4] && a[6] && a[8] ||
a[2] && !a[4] && a[6] && a[8] ||
a[2] && a[4] && !a[6] && a[8] ||
a[2] && a[4] && a[6] && !a[8] ||
a[2] && a[4] && a[6] && a[8])) /*7. C、E、G、I中至多只能2人参加;*/
if(!a[4] || a[5] && a[6]) /*8. 如果E参加,那么F和G也都参加;*/
if(!a[5] || !a[6] && !a[7]) /*9. 如果F参加,G、H就不能参加;*/
if(a[8] || a[9] || a[7]) /*10. 如果I、J都不参加,H必须参加。*/
{
for(i = 0; i < 10; i++)
if(a[i]) printf("%c ", 'A' + i);
printf("\n");
}
}
int main()
{
int i;
for(i = 1; i <= 0x3FF; Test(i++));
return 0;
}
结果是
B C G H
C D G H
C D G J
B C G H J
C D G H J