传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2516
题目大意:中文题目不解释
分析:
必败点为斐波那契数。斐波纳契数有个性质:一个非斐波那契数的整数必定能写成了两个非连续斐波那契数的和,而两个非连续的斐波那契数,大数必定超过小数的2倍。根据这个,一个非斐波纳契数每次可以取那两个斐波纳契数中较小数的石子,即可让后手一直保持面对斐波纳契数且一次无法全部取完的状态。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n,i;
int f[100]={1,1,2,3};
for(i=4;i<46;i++)
f[i] = f[i-1] + f[i-2];
while(scanf("%d",&n) && n)
{
for(i=1;i<46;i++)
if(f[i] == n)
break;
if(i<46)
cout << "Second win" << endl;
else
cout << "First win" << endl;
}
return 0;
}