POJ2348 UVa10368 HDU1525 Euclid's Game【博弈】

问题链接POJ2348 UVa10368 HDU1525 Euclid's Game


问题描述参见上文。

问题分析

这是一个博弈问题。有以下几个要点:

1.开始时,让a>b;

2.若a和b有0,则先手胜;

3.若a%b=0,则当前玩家胜;

4.若a/b>1,则当前玩家可以胜(当前玩家知道<b,a%b>是否必胜,若不是则将<a,b>变为<a%b,b>即可)

5.若b<a<2*b,则一步一步模拟下去。

程序说明:(略)

参考链接:(略)


AC的C++语言程序:

/* POJ2348 UVa10368 HDU1525 Euclid's Game */

#include <iostream>

using namespace std;

int main()
{
    int a, b;

    while(cin >> a >> b && (a || b)) {
        bool Stanwins = true;

        if(a < b)
            swap(a, b);
        while(b) {
            if(a % b == 0 || a / b > 1)
                break;
            a = a - b;
            swap(a, b);
            Stanwins = !Stanwins;
        }
        if(Stanwins)
            cout << "Stan wins" << endl;
        else
            cout << "Ollie wins" << endl;
    }

    return 0;
}


posted on 2017-05-15 23:35  海岛Blog  阅读(125)  评论(0编辑  收藏  举报

导航