poj1067 取石子游戲

鏈接:http://poj.org/problem?id=1067

題目描述:

有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者爲勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最後你是勝者還是敗者。

 

以爲和poj2234一樣呢。可是發現沒那麼簡單。又是另一個博弈問題。

威佐夫博弈問題。好複雜的說。套用公式罷了。。。

有兩堆石子x、y(x<y)

令k=y-x;

若x==(int)k*((1+sqrt(5.0))/2),

則先拿不能取勝,否則先拿取勝。

/*
威佐夫博弈
*/

#include<stdio.h>
#include<math.h>
int main()
{
    int x,y,k;
    while(scanf("%d%d",&x,&y)!=EOF)
    {
        if(x > y)
        {
            k = x;
            x = y;
            y = k;
        }
        k = y - x;
        if(x == (int)(k*(1 + sqrt(5.0))/2))
        {
            printf("0\n");
        }
        else
            printf("1\n");
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章