有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下:
1)先手不能在第一次把所有的石子取完,至少取1颗;
2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍。
约定取走最后一个石子的人为赢家,求必败态。
结论:当n为Fibonacci数的时候,必败。
f[i]:1,2,3,5,8,13,21,34,55,89……
nyoj 385
#include<stdio.h> long long a[110]={0,1}; int main(){ long long n; for(int i=2;i<100;i++){ a[i]=a[i-1]+a[i-2]; } while(scanf("%lld",&n)!=EOF){ int flag=0; for(int i=1;i<100;i++){ if(a[i]==n){ flag=1; break; } } if(flag) printf("No\n"); else printf("Yes\n"); } return 0; }