1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win".
Input输入有多组.每组第1行是2<=n<2^31. n=0退出. Output先取者负输出"Second win". 先取者胜输出"First win".
参看Sample Output.
Sample Input
2 13 10000 0Sample Output
Second win Second win First win
斐波那契博弈,其实是通过找规律看出来的。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int mx = 45;
long long num[45], n;
int re;
void dd(){
num[0]= 2;num[1] =3;
for(int i = 2;i < 45;i++){
num[i] = num[i-1] + num[i-2];
}
}
int main(){
dd(); // 预处理打表
while(scanf("%I64d",&n) && n){
re = lower_bound(num, num+mx, n) - num;
if(num[re] == n)
puts("Second win");
else{
puts("First win");
}
}
return 0;
}