斐波拉杰博弈 取石子(五)

描述himdd最近很想玩游戏,于是他找到acmj和他一起玩,游戏是这样的:有一堆石子,两个人轮流从其中取走一定的石子,取走最后所有石子的人为赢家,不过得遵循如下规则:
1.第一次取不能取完,至少取1颗.

2.从第二次开始,每个人取的石子数至少为1,至多为对手刚取的石子数的两倍。

himdd事先想知道自己会不会赢,你能帮帮他吗?(每次himdd先手)

 
输入
有多组测试数据,每组有一个整数n(2<=n<2^64);
输出
himdd会赢输出Yes,否则输出No;
样例输入
2
5
6
样例输出
No
No
Yes

 1  
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 long long a[100];
 5 
 6 int main()
 7 {
 8     int i,j,ok;
 9     long long m;
10     a[1]=a[2]=1;
11     for(i=3;i<=100;i++)
12      a[i]=a[i-1]+a[i-2];
13      //for(i=50;i<94;i++)
14      //printf("%d   %lld\n",i,a[i]);
15     while(scanf("%lld",&m)!=EOF)//dev中默认的long long数用I64表示
16     {
17       ok=1;
18        for(i=2;i<=92&&m<=a[92];i++)
19              if(a[i]==m)
20              {
21                 ok=0;
22                 printf("No\n");
23                 break;
24              }
25              if(ok) printf("Yes\n");
26      }
27      //system("pause");
28      return 0;
29 }
30     
31     
32         

 

posted @ 2013-05-25 10:53  萧凡客  阅读(259)  评论(0编辑  收藏  举报