欧几里德的游戏

https://www.luogu.org/problem/show?pid=1290#sub
这里写图片描述

这题目好像辗转相除。
每次的两个数 a , b (a>b)
分为两种情况:
一,
此时状态为: a/b>1 ,那最完美的做法是取走(a/b-1)*b,那么剩下的两个数就为(a%b+b,b),
对手唯一的做法就是取走b,剩下(b,a%b),这样就能保证每一次的初状态都是由自己取,那等到
a%b==0 时,就会获胜。所以到这种初状态时,这时的选手一定获胜。
二,
a/b=1
那只能取走b,就会得到(a%b , b),直到第一种状态时,轮到谁谁就获胜

#include<iostream>
#include<cstdio>
#define LL long long 
using namespace std;
int n;
int main()
{
     scanf("%d",&n);
     for(int i=1;i<=n;i++)
     {
        int a,b;
        scanf("%d%d",&a,&b);
        if(a<b) swap(a,b);
        int f=1;
        while(a/b==1&&a!=b)
        {
            a=a-b;
            swap(a,b);
            f=-f;
        }
        if(f==1) printf("Stan wins
");
        else printf("Ollie wins
");
     }
     return 0;
}
原文地址:https://www.cnblogs.com/dfsac/p/7587941.html