#include #include #include #include int main() { /* Pseudo-Zufallsnumberengenerator initialisieren */ srand(time(0)); /* Zahl aus dem Bereich [32..95] zufaellig bestimmen */ int number = rand() % 64 + 32; printf("*** Aliquot Game ***\n"); bool players_turn = true; while (number > 1) { printf("Number: %d\n", number); int move; if (players_turn) { bool invalid_move = true; do { printf("Your move: "); if (scanf("%d", &move) != 1) exit(1); if (move <= 0 || move >= number) { printf("Out of range!\n"); } else if (number % move != 0) { printf("%d is not a proper divisor of %d!\n", move, number); } else { invalid_move = false; } } while (invalid_move); } else { if (number % 2 == 0) { /* Sehr schoen, wir werden gewinnen, wenn wir eine ungerade Zahl aussuchen; wir waehlen hier den groessten ungeraden Teiler aus */ move = number / 2; while (move % 2 == 0) { move /= 2; } } else { /* Das sieht fuer den Gegner verdammt gut aus :-( */ for (move = 3; move < number && number % move != 0; move += 2); if (move >= number) move = 1; } printf("My move: %d\n", move); } /* Zug durchfuehren und an den anderen Spieler uebergeben */ number -= move; players_turn = !players_turn; } if (players_turn) { printf("You lose!\n"); } else { printf("Congratulations, you win!\n"); } }