Link to the question: UVA 10368-Euclid's game
Two numbers are given. Two people are playing a game. Each operation starts with Stan and several small numbers can be taken from the maximum number, that is, a-kb, A is a relatively large number, B is a relatively small number, KB is the removed value, K must be an integer, and kb ≤. If the operation fails, the opponent wins.
Solution thinking: Simulate, until the maximum value of K is not 1, the current operator has the initiative, both can win. In special cases, Stan wins when a = B.
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main () { int a, b; while (scanf("%d%d", &a, &b) == 2 && a + b) { int s = 0; if (a != b) { int x = max(a, b); int y = min(a, b); while (true) { if (x / y > 1) break; x = x%y; swap(x, y); s = 1 - s; } } printf("%s wins\n", s ? "Ollie" : "Stan"); } return 0;}