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
0
Sample 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;
}
\
\
\
本文已参与「新人创作礼」活动,一起开启掘金创作之路