可以用搜索的姿势写过。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
long long a,b;
bool Judge(int a,int b)
{
if(a < b) swap(a,b);
if(!b) return false;
int end = a / b;
for(int i = end; i >= 1; --i)
if(!Judge(a - i * b,b))
return true;
return false;
}
int main()
{
long long x,y;
while(scanf("%lld%lld",&x,&y),x + y)
printf("%s\n",Judge(x,y) ? "Stan wins":"Ollie wins");
}
下面有个题解:
分析:每次令a大于b,
1 如果a-b<b,则只能有一种减的方法,即a=a-b
2. a-b>b,则有多种减的方法,a减去b的倍数后,可能结果小于b,如果小于b,下一步将是