1. 程式人生 > >斐波那契博弈

斐波那契博弈

規則 sca clas first i++ () fibonacci bsp ace

一堆個數為n的物品,雙方輪流按如下規則取物品,取完最後物品的人勝利。

先手不可以第一次取完所有物品。

之後每次可以取得物品個數1<=k<=對手上次取得個數的2倍。

結論:

先手勝當且僅當n不是Fibonacci數。(證明略,心累)

using namespace std;
int fib[50];
int main(){
    fib[0]=1;fib[1]=2;
    for(int i=2;i<45;i++)
        fib[i]=fib[i-1]+fib[i-2];//打表
    int n;
    while(scanf("
%d",&n)!=EOF&&n){ int i=0; for(i=0;i<45;i++) if(fib[i]==n) break; if(i<45) puts("Second"); else puts("First"); } return 0; }

斐波那契博弈