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

题意:1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。

         取完者胜,先取者负输出"Second win",先取者胜输出"First win".

思路:很明显这是一个斐波那契博弈,当且仅当 n 为斐波那契数时先手必败 

代码:

#include <iostream>

using namespace std;

int main()
{
    int n;
    int f[45];
    f[0]=2;
    f[1]=3;
    for(int i=2;i<45;i++)
      f[i]=f[i-1]+f[i-2];
    while(cin>>n&&n)
    {
        int flag=1;
        for(int i=0;i<45;i++)
        if(f[i]==n)
        {
            flag=0;break;
        }
        if(flag) cout<<"First win"<<endl;
        else cout<<"Second win"<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/simplekinght/p/6171221.html