思路
在代码注释中给出了详细思路
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
void dfs(int a, int b, int step)
{
if (a % b == 0 || a / b >= 2)
{
if (step & 1) //step是奇数
{
cout << "win" << endl;
return;
}
else
{
cout << "lose" << endl;
return;
}
}
// (25, 7) => (7, 4) => (4, 3) => (3, 1)
// 始终将较大的堆放在前面一堆, a % b 表示从a中拿走整数倍的b, 此时 0<= a%b <= b - 1
dfs(b, a % b, step + 1);
}
int main()
{
while (cin >> n >> m, n || m)
{
if (n < m) swap(n, m); //将最多石头的石头堆放在n堆
if (n / m >= 2) //根据提示, 先手必胜
{
cout << "win" << endl;
}
else dfs(n, m, 1);
}
return 0;
}