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

时间:2023-03-08 16:55:15

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

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

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

代码:

#include <iostream>

using namespace std;

int main()
{
int n;
int f[];
f[]=;
f[]=;
for(int i=;i<;i++)
f[i]=f[i-]+f[i-];
while(cin>>n&&n)
{
int flag=;
for(int i=;i<;i++)
if(f[i]==n)
{
flag=;break;
}
if(flag) cout<<"First win"<<endl;
else cout<<"Second win"<<endl;
}
return ;
}