且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

威佐夫

更新时间:2022-06-16 05:09:17



这种博弈比前面一种要稍微复杂一点。我们来看下下面这个游戏。

有两堆火柴棍,每次可以从某一堆取至少1根火柴棍(无上限),或者从两堆取相同的火柴棍数,最后取完的是胜利者。


直接记结论吧,证明自己上网查询。

若两堆火柴的初始值为(X,Y)    且X<Y,则令Z = Y - X,计算:

代码如下:

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
    int m,n,a,b,z;
    while(cin>>m>>n)
    {
        a=max(m,n);
        b=min(m,n);
        z=a-b;
        int t=(int)(sqrt(5)+1)*z/2;
        if(t==b)
           cout<<"Second"<<endl;
        else
            cout<<"First"<<endl;
    }
    return 0;
}

相关阅读