题目链接
题目不难想出来,对于这样的博弈题,多算几个测试用例,找规律即可,2 3 5 8 13 。。。。。是必败点,
开始我我只想开一个2^31的数组,我想的太天真了,不用想是愚蠢的,开这么大干嘛,可以看看第几个斐波那契超过了2^31可以了,在枚举每一个,即可
具体看代码
先找几个斐波那契超过了2^31
#include<stdio.h>
int main(void){ int a[100]; int i; a[0]=2; a[1]=3; for(i=2;i<=100;i++) { a[i]=a[i-1]+a[i-2]; if(a[i]<0) break; } printf("%d %d\n",a[i-1],i); return 0;}
可以看到
output
1836311903 44
Process returned 0 (0x0) execution time : 0.271 s
Press any key to continue.
最大的为1836311903 第44即可,所以数组开45就可以了。
看我的代码
#include<stdio.h>
int main(void){ int a[50]; int i,n; a[0]=2; a[1]=3; for(i=2;i<45;i++) a[i]=a[i-1]+a[i-2]; while(scanf("%d",&n)==1&&n) { for(i=0;i<45;i++) if(a[i]==n) break; if(i<45) printf("Second win\n"); else printf("First win\n"); } return 0;}
总结:
这个题最大的亮点,是判断,最大的却不超过2^31 的斐波那契在第几项。
开始,我没想到。这个可以记住的。