斐波那契博弈:
有一堆物品,两人轮流取物品,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上一次取的物品数的二倍且至少为一件,取走最后一件物品的人获胜。
结论是:先手胜当且仅当n不是斐波那契数(n为物品总数)
#include<stdio.h> using namespace std; #define N 55 int f[N]; void init(){ f[0]=0;f[1]=1; for(int i=2;i<N;i++){ f[i]=f[i-1]+f[i-2]; } } int main(){ init(); int n; while(scanf("%d",&n)&&n){ int flag=0; for(int i=0;i<N;i++){ if(f[i]==n) { flag=1; break; } } if(flag==0) printf("First win\n"); else printf("Second win\n"); } return 0; }