用那么多循环?
惟我独行...
#include <stdio.h> #define check1(value, index) ((((value) >> ((index) - 'A')) & 1) == 1) #define check0(value, index) ((((value) >> ((index) - 'A')) & 1) == 0) void print(int test) { int ch; for (ch = 'A'; ch <= 'J'; ch++) if (check1(test, ch)) printf("%c ", ch); printf("\n"); } int t0(int test) {return check0(test, 'A') || check1(test, 'B');} /* 如果A参加,B也参加 */ int t1(int test) {return check1(test, 'C') || check0(test, 'D');} /* 如果C不参加,D也不参加 */ int t2(int test) {return check0(test, 'A') || check0(test, 'C');} /* A和C中只能有一个人参加 */ int t3(int test) {return (check1(test, 'B') && check0(test, 'D')) || (check0(test, 'B') && check1(test, 'D'));} /* B和D中有且仅有一个人参加 */ int t4(int test) {return !((check1(test, 'D') && check0(test, 'E') && check0(test, 'F') && check0(test, 'G') && check0(test, 'H')) || (check0(test, 'D') && check1(test, 'E') && check0(test, 'F') && check0(test, 'G') && check0(test, 'H')) || (check0(test, 'D') && check0(test, 'E') && check1(test, 'F') && check0(test, 'G') && check0(test, 'H')) || (check0(test, 'D') && check0(test, 'E') && check0(test, 'F') && check1(test, 'G') && check0(test, 'H')) || (check0(test, 'D') && check0(test, 'E') && check0(test, 'F') && check0(test, 'G') && check1(test, 'H')) || (check0(test, 'D') && check0(test, 'E') && check0(test, 'F') && check0(test, 'G') && check0(test, 'H')));} /* D、E、F、G、H 中至少有2人参加 */ int t5(int test) {return (check1(test, 'C') && check1(test, 'G')) || (check0(test, 'C') && check0(test, 'G'));} /* C和G或者都参加,或者都不参加 */ int t6(int test) {return !((check1(test, 'C') && check1(test, 'E') && check1(test, 'G') && check1(test, 'I')) || (check0(test, 'C') && check1(test, 'E') && check1(test, 'G') && check1(test, 'I')) || (check1(test, 'C') && check0(test, 'E') && check1(test, 'G') && check1(test, 'I')) || (check1(test, 'C') && check1(test, 'E') && check0(test, 'G') && check1(test, 'I')) || (check1(test, 'C') && check1(test, 'E') && check1(test, 'G') && check0(test, 'I')));} /* C、E、G、I中至多只能2人参加 */ int t7(int test) {return check0(test, 'E') || (check1(test, 'F') && check1(test, 'G'));} /* 如果E参加,那么F和G也都参加 */ int t8(int test) {return check0(test, 'F') || (check0(test, 'G') && check0(test, 'H'));} /* 如果F参加,G、H就不能参加 */ int t9(int test) {return (check1(test, 'I') || check1(test, 'J')) || check1(test, 'H');} /* 如果I、J都不参加,H必须参加 */ int main(void) { int i; for (i = 1; i <= 0x3FF; i++) if (t0(i) && t1(i) && t2(i) && t3(i) && t4(i) && t5(i) && t6(i) && t7(i) && t8(i) && t9(i)) print(i); return 0; }