模拟题,[n, +∞) 为必胜态,即先到达该区间的玩家获胜;则 [n/9, n) 为必败态,即先到达该区间的玩家失败,因为对手一定可以一步到达必胜态;则 [n/9/2, n/9) 为必胜态,因为对手一步只能到达必败态;以此类推,如果 1 为必败态,则 Stan 获胜,否则 Ollie 获胜。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double n;
while (cin >> n)
{
bool flag = true; //ture表示必胜态,false表示必败态
while (n > 1)
{
if (flag)
n = ceil(n / 9);
else
n = ceil(n / 2);
flag = !flag;
}
if (flag == false)
cout << "Stan wins." << endl;
else
cout << "Ollie wins." << endl;
}
return 0;
}
继续加油。