斐波那契博弈

有一堆个数为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;
} 

猜你喜欢

转载自blog.csdn.net/dear_jia/article/details/80200245