题意:有一堆数量为n的石子, 第一个人可以取任意多的石子x(但是不能取完),第二个人取的数量是1-2*x;谁先取完谁赢

思路:斐波那契博弈, 套路是:
1.第一个人不能取完
2.第二个人取上一个人的1~2*x 的范围。

n=2时,B必胜
n=3时,B必胜
n=4,A取1个,那么必赢
n=5,A取234必输,取1,相对B来说是n=4的情况,B必胜,A必输
n=6,A取2345必输,取1,相对B来说是情况为5,那么B必输,A必胜
n=7,A取3456必输,取1,对B来说是n=6的情况,B必胜,A必输。取2,对于B来说是n=5的情况,B必输,A必胜,那么A会选先抽2个石子
n=8,A取34567必输,A取1,对于B当前来说是n=7的情况,B必胜,A必输。A取2,对于B来说是n=6的情况,B必胜,A必败。
……
找规律:2358 B胜,如果石子数量是斐波那契数列里的某一个数,B必胜,A必败;否则B必败,A必胜。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f[500];
const int maxn=INT_MAX;
void init()
{
    f[1]=f[2]=1;
    for(int i=3;i<=50;i++)
        f[i]=f[i-1]+f[i-2];
    /*for(int i=1;i<=50;i++) printf("%d %I64d\n",i,f[i]-maxn);*/
    return ;
}
int main(void)
{
    init();
    int n;
    while(cin >> n && n)
    {
        int flag=0;
        for(int i=3;i<=50;i++)
        {
            if(n==f[i])
            {
                flag=1;
                break;
            }
        }
        if(!flag)   printf("First win\n");
        else    printf("Second win\n");
    }
}

其他类型博弈:https://wenku.baidu.com/view/249434d284254b35eefd3498.html