HDU-2516-取石子游戏

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=2516

题目不难想出来,对于这样的博弈题,多算几个测试用例,找规律即可,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 的斐波那契在第几项。

开始,我没想到。这个可以记住的。

 

posted @ 2014-09-23 21:21  立刻行动  阅读(138)  评论(0编辑  收藏  举报