#include int main () { int okand[256]; int okor[256]; int okxor[256]; int bitcount[256]; int guess, hint; int mask; int i; for (i=0; i<256; ++i) { okand[i] = okor[i] = okxor[i] = 1; bitcount[i] = 0; for (mask=1; mask <= 255; mask <<= 1) { if (i & mask) bitcount[i]++; } } while (1) { printf ("Geratene Zahl und Hinweis: "); if ((scanf ("%d %d", &guess, &hint) != 2) || (guess > 255) || (guess < 0) || (hint < 0) || (hint > 8)) { printf ("Komische Zahlen!\n"); continue; } okand[guess] = okor[guess] = okxor[guess] = 0; for (i=0; i<=255; ++i) { if (bitcount[guess & i] != hint) okand[i] = 0; if (bitcount[guess | i] != hint) okor[i] = 0; if (bitcount[guess ^ i] != hint) okxor[i] = 0; } for (i=0; i<=255; ++i) { if (okand[i] || okor[i] || okxor[i]) break; } if (i > 255) { printf ("Widerspruechliche Hinweise!\n"); break; } printf ("Versuch's mal mit %d\n", i); } return 0; }