取石子游戏 HDU - 2516(斐波那契博弈)

斐波那契博弈

有一堆物品,两人轮流取物品,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上一次取的物品数的二倍且至少为一件,取走最后一件物品的人获胜。

结论是:先手胜当且仅当n不是斐波那契数(n为物品总数)


#include <iostream>


using namespace std;

int main()
{
    long long n;
    int a[1001]={0};
    a[0]=1;
    a[1]=1;
    for(int i=2;i<=1000;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    while(cin>>n&&n)
    {
        int flag=0;
        for(int i=0;i<=1000;i++)
        {
            if(a[i]>n)
                break;
            if(a[i]==n)
            {
                cout<<"Second win"<<endl;
                flag=1;
                break;
            }
        }
        if(flag==0)
            cout<<"First win"<<endl;
    }
    return 0;
}

版权声明:本文为smithstf原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。