题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2516
题目大意:1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win"。
解题思路:好吧,我是看别人找的规律。只要n不是斐波那契数,那先手必胜,反之先手必败。
1 #include<cstdio> 2 typedef long long LL; 3 LL a[60]={0,1,2}; 4 5 void fib(void){ 6 for(int i=3;i<=50;i++){ 7 a[i]=a[i-1]+a[i-2]; 8 } 9 } 10 11 int main(){ 12 fib(); 13 int n; 14 while(~scanf("%d",&n)&&n){ 15 bool flag=true; 16 for(int i=2;i<=50;i++){ 17 if(a[i]==n) 18 flag=false; 19 } 20 if(flag) 21 puts("First win"); 22 else 23 puts("Second win"); 24 } 25 return 0; 26 }