斐波拉杰博弈 取石子(五)
描述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