題目鏈接:uva 10368 - Euclid's Game
題目大意:給出兩個數,兩個人做一個游戲,每次有stan開始操作,每次操作可以從最大的數中取走若干個小的數,即a-kb,a為比較大的數,b為比較小的數,kb為取走的值,k必須為整數,並且kb≤a。如果不能順利執行操作,則對手勝利。
解題思路:模擬,直到k的最大值不為1時,當前操作者就掌握了主動權,既可以獲勝。特殊情況為a=b的時候,stan勝。
#include
#include
#include
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;
}