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;
}
浙公网安备 33010602011771号